A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

如 x  与  y 的交换,不能用中间变量,请问如何实现.

点评

如果你的问题已经得到解决,请及时将主题改为[已解决],如果还有问题请继续追问,否则将扣除技术分,谢谢  发表于 2013-3-20 12:14

9 个回复

倒序浏览
/*
      对两个整数变量的值进行互换(不需要第三方变量)

*/
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
        }
}

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
x= x + y;
y= x - y;
x= x - y;
但是如果x和y的值非常大,容易超出int范围,所以建议使用第三方变量实现交换。
回复 使用道具 举报
  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: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);  
}
}

回复 使用道具 举报
同学,是不是应该多看看毕老师的视频,再提问呢?老师的视频中讲的特别详细
回复 使用道具 举报
lxww 中级黑马 2013-3-19 22:48:23
7#
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 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:08
10#
你可以看一下day02代码 OperateDemo2.java,其中就有提到!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马