黑马程序员技术交流社区

标题: 好简单的题目竟然改不来。。 [打印本页]

作者: 泮和顺    时间: 2012-3-2 21:39
标题: 好简单的题目竟然改不来。。
class  Swap
{
        public static void main(String[] args)
        {
              int x=8;
               int y=9;

                System.out.println("x="+x+",y="+y);
               // Swap_3(x,y);
                //这里使用了置换方法,为什么打印出来还是没有置换……如果不用方法,直接写在主方法里或者把输出语句放在Swap_3(int a,int b)里是可以的..请前辈解释下..
                x=x ^y;
                y=x ^y;
                x=x ^y;
                System.out.println("x="+x+",y="+y);
                                        }
                public static void Swap_3(int a,int b)
        {
               // a = a ^ b;
               // b = a ^ b;
               // a = a ^ b;
                                         

        }

}

也知道了是形式参数的问题 到底该如何改呢 JAVA没有&这些东西的
作者: 陈建凡    时间: 2012-3-2 22:42
值 的传递是单向,形参的改变不会 影响到实参,Swap_3 被调用的时候,在堆内存中生成了 2个新变量a,b.调用的时候把想x,y的值 传给形参了,在Swap_3 方法中,两值被交换了。但是Swap_3 方法运行 结束后就 会把 局部a,b变量 存储 空间 自动释放了 。调用结束,x,y的值 依然没有变啊
作者: H07000223    时间: 2012-3-2 22:42
本帖最后由 H07000223 于 2012-3-2 22:44 编辑

因为x、y值的确是赋给a、b,但是swap方法并没有把a、b最终结果返回给相应的x、y。

他们没有任何内在联系。所以。。。就这样悲剧。

最主要的他们不是对象,只是基本数据类型。你可以用数组这样做:

  1.         public static void swap(int[] i)
  2.         {
  3.                 int temp=i[0];
  4.                 i[0]=i[1];
  5.                 i[1]=temp;
  6.         }
  7.        
  8.         public static void main(String[] args)
  9.         {
  10.                 int[] i={3,4};
  11.                
  12.                 //利用数组的方式传入swap方法从达到互换的目的
  13.                 swap(i);
  14.                
  15.                 System.out.println(i[0]);
  16.                 System.out.println(i[1]);
  17.         }
复制代码

作者: 吕猛    时间: 2012-3-2 22:47
public static void Swap_3(int a,int b) 此方法返回类型为void,也就是没有返回类型。把参数传进来后一通运算,运算玩了后,就完了。你是在拿机器开涮,呵呵。




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