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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 邓飞 中级黑马   /  2013-9-6 10:42  /  1802 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨增坤 于 2013-9-9 20:05 编辑

刚在网上看到的,觉得挺有意思,想了下没有想出来,求指点


int a = 8 ;
int b = 9;

求不用第三方变量交换a和b的值  ??

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

12 个回复

倒序浏览
                a=a+b;
                b=a-b;
                a=a-b;
                System.out.println("a=="+a);
                System.out.println("b=="+b);

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

回复 使用道具 举报
这个问题我碰到过 哈哈

a = a + b ;//有越界的风险
b = a - b ;
a = a - b ;

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

回复 使用道具 举报
  a=a+b;  b=a-b; a=a-b;

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

回复 使用道具 举报
我有两种方法
1:用异或(好记):n=m^n; m=m^n; n=m^n;
2:(好理解):x=y+(y=x)-x;

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

回复 使用道具 举报
有两种方法:
第一种,上面已经说过类,在这里补充一下,若变量不是byte,short,char型的编译时会报错,因为这三种类型在进行算术运算时,会自动提升为int型,不能再赋值给上面三种类型的变量。
第二种,是通过位运算实现的  一个数异或另外一个数两次仍然是它本身,如下:
int a = 8;
int b = 9;
a = a ^ b;
b = a ^ b;
a = a ^ b;

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

回复 使用道具 举报
  1. class Test
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int a=8;
  6.                 int b=9;
  7.                 System.out.println("a="+a+",b="+b);
  8.                 //方法一
  9.                 a=a+b;
  10.                 b=a-b;
  11.                 a=a-b;
  12.                 System.out.println("a="+a+",b="+b);
  13.                 //方法二
  14.                 a=a^b;
  15.                 b=a^b;
  16.                 a=a^b;
  17.                 System.out.println("a="+a+",b="+b);
  18.                 //方法三
  19.                 a=b+(b=a)*0;
  20.                 System.out.println("a="+a+",b="+b);
  21.         }
  22. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

回复 使用道具 举报
楼主你好,如果您的问题已经解决,


请把您的问题的未解决更改为已解决

谢谢合作!

回复 使用道具 举报
这个一种是用异或,根据通一个数对同一个数异或两次结果不变,还有就是利用第三方元素,由于你这个题要求不润许使用第三个元素,所以用他们的和或差,你那个题定出了值,所以可以使用乘,不能用除,用除取得是整数所以不行,不定义值的话已不能用乘。方法一是:a=a^b,b=b^a,a=a^b;d
第二种:a=a+b,b=a-b,a=a-b; a=a-b;b=a+b;a=a+b

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

回复 使用道具 举报
第一种
int a = 8 ;
int b = 9;
a = a^b;
b = a^b;
a = a^b;
第二种
int a = 8 ;
int b = 9;
a = a+b; //如果a,b值过大,这里容易超出int范围。
b = a-b;
a = a-b;

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

回复 使用道具 举报
用逻辑运算符异或(^):a = a^b;

评分

参与人数 1技术分 +1 收起 理由
薛鹏鹏 + 1

查看全部评分

回复 使用道具 举报
逻辑运算符:a = a^b; b = a^b; a = a^b;

评分

参与人数 1技术分 +1 收起 理由
薛鹏鹏 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马