黑马程序员技术交流社区

标题: 如何实现两个数据的交换,不能用中间变量 [打印本页]

作者: 明锦添    时间: 2013-3-19 22:28
标题: 如何实现两个数据的交换,不能用中间变量
如 x  与  y 的交换,不能用中间变量,请问如何实现.
作者: 张宝    时间: 2013-3-19 22:35
/*
      对两个整数变量的值进行互换(不需要第三方变量)

*/
class Test
{
        public static void main(String[] args)
        {
                int a=5;
                int b=6;

                // 不使用第三方变量   ^一个数异或另外一个数两次还是这个数本身

                a=a^b; //这个时候a就代表的是b的值

                b=a^b;  //b的值变成了5    (a^b)^b
               
                a=a^b;  //a的值变成了6    (a^b)^a
               
                System.out.println(a+"  "+b);  //6   5
        }
}


作者: 刘国涛    时间: 2013-3-19 22:37
x= x + y;
y= x - y;
x= x - y;
但是如果x和y的值非常大,容易超出int范围,所以建议使用第三方变量实现交换。
作者: 曹春贵    时间: 2013-3-19 22:38
  1. int m = 5, n = 8;  
  2. // 需要第三方变量的方法,该方法简单易懂,实际开发中基本都使用该方法  
  3. int tmp = m;  
  4. m = n;  
  5. n = tmp;  
  6. System.out.println("m=" + m + ",n=" + n);  
  7. //使用累计俩数之和再分别求差值  
  8. m=m+n;  
  9. n=m-n;  
  10. m=m-n;  
  11. System.out.println("m=" + m + ",n=" + n);  
  12. //使用 一个数异或另一个数俩次还是该数本身的原理  
  13. m=m^n;  
  14. n=m^n;  
  15. m=m^n;  
  16. System.out.println("m=" + m + ",n=" + n);
复制代码

作者: 张宝    时间: 2013-3-19 22:39
本帖最后由 张宝 于 2013-3-19 22:42 编辑

  /*
   方法2:对两个整数变量的值进行互换(不需要第三方变量)
*/
class Test2
{
public static void main(String[] args)
{
  int a=5;
  int b=6;
  a=b+(b=a)-a;
  
  System.out.println(a);
  System.out.println(b);  
}
}


作者: 黄玉昆    时间: 2013-3-19 22:45
同学,是不是应该多看看毕老师的视频,再提问呢?老师的视频中讲的特别详细
作者: lxww    时间: 2013-3-19 22:48
class Test02
{
        public static void main(String[] args)
        {
       
                int a=3;
                int b=7;
                a=a^b;
                b=a^b;
                a=a^b;
                System.out.println("a="+a+"; "+"b="+b);
       
        }
}
作者: 田磊阳    时间: 2013-3-19 22:54
采用第三方是最好的方法,没有太多的问题,如果分要不用第三方,那你可以采用异或的方式
作者: 耿文达    时间: 2013-3-19 22:57
本帖最后由 耿文达 于 2013-3-19 23:01 编辑

利用“一个数异或同一个数两次,结果还是最初的那个数”这个性质,代码如下:
  1. class  Test
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int n = 5,m = 9;
  6.                 System.out.println("n="+n+",m="+m);
  7.                
  8.                 n = n ^ m;

  9.                 m = n ^ m;      //此时n'=n^m,因此m' = (n^m)^m = n ;

  10.                 n = n ^ m;       //n'' = n' ^ (n' ^ m)= m

  11.                 System.out.println("n="+n+",m="+m);
  12.         }
  13. }
复制代码

作者: 小路飞    时间: 2013-3-20 00:44
你可以看一下day02代码 OperateDemo2.java,其中就有提到!




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