黑马程序员技术交流社区

标题: 想写这样一个方法,求高手帮忙 [打印本页]

作者: quanhui    时间: 2011-11-16 16:29
标题: 想写这样一个方法,求高手帮忙
想写一个方法,没有返回值,方法的作用是交换两个参数的值。如输入a=1,b=2 则运行方法之后a=2,b=1
void Change(int a, int b)
{

//怎么写
}

求高人告诉我这个方法怎么实现呢? 请注意这里的参数可都是基本类型哦!
作者: 欧阳文愿    时间: 2011-11-16 17:00
  1. class Test
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int x = 2, y = 3;
  6.                 System.out.println("交换前的x="+x+"y="+y);
  7.                                 swapName(x,y);
  8.                                 System.out.println("调用swapName方法之后的x="+x+"y="+y);
  9.                                 int temp=0;
  10.                                 temp=x;  
  11.                                 x=y;
  12.                                 y=temp;
  13.                                 System.out.println("传值交换后的x="+x+"y="+y);
  14.         }

  15.         private static void swapName ( int a, int b )
  16.         {
  17.                 int temp = a;
  18.                 a = b;
  19.                 b = temp;
  20.            System.out.println("参数引用交换后的x="+a+"y="+b);
  21.         }
  22. }
复制代码
可参照帖子http://bbs.itheima.com/forum.php ... amp;page=1#pid19114
作者: quanhui    时间: 2011-11-16 17:05
欧阳文愿 发表于 2011-11-16 17:00
可参照帖子http://bbs.itheima.com/forum.php?mod=viewthread&tid=3334&page=1#pid19114

看一下输出就知道,那个方法没起作用,方法里面的变量值确实变了,但是main方法里的变量还是原来的值
作者: 张奇云    时间: 2011-11-16 19:04
不可能实现!
基本类型和基本类型变量被当作参数传递给方法时,是值传递。在方法实体中,无法给原变量重新赋值,也无法改变它的值。

作者: SilenceSea    时间: 2011-11-16 19:29
楼上说的对,不可能实现。
基本数据类型的参数传递是值传递,只是将栈内存中变量的值复制后传递给方法。
无论方法体内的形参(a和b)怎么交换,都不会影响实参(a和b)的值。
作者: quanhui    时间: 2011-11-17 09:00
以下是C#中的解决办法:
public void Change(ref int a, ref int b)
{
       a = a ^ b;
       b = a ^ b;
       a = a ^ b;
}
ref 关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。
看来Java至少在这个问题上是落后的。
作者: 程立彬    时间: 2011-11-17 11:10
楼主可以换一个方法
void Change(int& a, int& b)
{
   int temp = a;
             a = b;
             b = temp;

}

通过引用传递。
作者: quanhui    时间: 2011-11-17 11:15
程立彬 发表于 2011-11-17 11:10
楼主可以换一个方法
void Change(int& a, int& b)
{

这是Java么???
作者: 程立彬    时间: 2011-11-17 11:19
quanhui 发表于 2011-11-17 11:15
这是Java么???

java不能有引用吗?
作者: moonlight    时间: 2011-11-17 11:20
你定义了a=1,b=2.然后把这两个值当做参数调用了  change(a,b)方法 这个方法的作用只是形参交换数值 ,但对实参没有任何影响。不知道你发现这一点没有 你定义的这两个静态变量 static int a; static int b; 与change(a,b)方法里的a和b根本不是一回事,是两个不同的性质。public static void change(int a,int b)
{
      a = a+ b;   
      b = a - b;   
      a = a - b;   

}
这个方法体里的a,b只是形参
作者: 张晨    时间: 2011-11-17 11:21
把a 、b 定义成Integer类型就可以




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2