黑马程序员技术交流社区

标题: 关于调换两个数字的位置,不用第三方变量。 [打印本页]

作者: 唐林渊    时间: 2012-2-15 07:47
标题: 关于调换两个数字的位置,不用第三方变量。
本帖最后由 唐林渊 于 2012-2-18 08:37 编辑

关于调换两个数字的位置,不用第三方变量。大家晒晒有几种方法,本人了解四种。
比如A=2 B=6调换位置
作者: 李杨    时间: 2012-2-15 11:08
感觉楼主在纠结。。。

就像你去你女朋友家,直接去做公交可以,或者先去火车站坐火车也可以,还可以去机场从哪里去哪里再去你女朋友家。。。

两个数交换位置。。。效率第一的是异或操作。。

但是在Java中不是不能用,最主要的是Java是面向对象,如果你使用异或操作就是面向过程了,所以最好使用第三方变量。
可以体现出面向对象的思想。。
作者: 秦碧    时间: 2012-2-15 11:49
交换a,b
a=a-b;
b=b+a;
a=b-a;

作者: 马欢    时间: 2012-2-15 11:57
交换a,b
a=a+b;//把两个数的和付给a
b=a-b;//和减b的值等于a的值付给b;
a=a-b;//和减现在的b也就是原来的a,得到原来b的值付给a
作者: 钟保罗    时间: 2012-2-15 13:49
交换位置
a=a*b;
b=a/b;
a=a/b;
作者: 靖美专    时间: 2012-2-15 15:30
本帖最后由 靖美专 于 2012-2-15 15:34 编辑

java语言提供的异或运算就可以实现这样的操作。例子如下
public static void main(String[] args) {
   int A=2,y=6;
     A=A^B;
     y=A^B;
    A=A^B;
     System.out.println("A="+A+" "+"B="+B);

}

请楼主把其他方法分享啊
作者: 冯祖焱    时间: 2012-2-15 18:57
本帖最后由 冯祖焱 于 2012-2-15 19:02 编辑

一条语句交换数值
  1. a = b + (b = a) * 0;
复制代码

作者: 黄秋    时间: 2012-2-15 19:40
LS, 这语句我刚从往届同学的帖子看到,就给你贴出来了。想了想,稍作修改,得:
a = b+(b = a)-a;
作者: 丁晓宇    时间: 2012-2-16 13:34
都是精英啊{:soso_e179:}
作者: 陈丹阳    时间: 2012-2-16 13:50
(1)先加后减
a = a+b
b = a-b
a = a-b
(2)先减后加
a = a-b
b = a+b
a =b-a
(3)先乘后除 注意精度
a = a*b
b = a/b
a = a/b
(4)先除后乘 注意精度
a = a/b
b = a*b
a = b/a
(5)异或
a = a^b
b = a^b
a = a^b
(6)再来一条搞笑的,说明了数学上有几种可逆运算就有几种不用三方变量的方法
a = a的b次方
b = a开b次方
a = log(b底) a(真数)
作者: 最初的理想    时间: 2012-2-16 20:43
黄秋 发表于 2012-2-15 19:40
LS, 这语句我刚从往届同学的帖子看到,就给你贴出来了。想了想,稍作修改,得:
a = b+(b = a)-a; ...

这个语句的执行有点奇怪,b+(b = a)-a执行顺序是从左向右执行,这就与括号的优先级最高相矛盾了,如果真是先执行括号中赋值语句b=a的话 结果就不对了,这就是矛盾的地方
作者: b_boywindy    时间: 2012-2-17 16:39
思想 都差不多 就看你想用哪个了。。。
作者: 陈伟    时间: 2012-2-17 21:16
a = a-b
b = a+b
a =b-a

作者: hxc2008q    时间: 2012-2-18 02:12
同问八楼那个能用吗
作者: 黄秋    时间: 2012-2-18 05:28
最初的理想 发表于 2012-2-16 20:43
这个语句的执行有点奇怪,b+(b = a)-a执行顺序是从左向右执行,这就与括号的优先级最高相矛盾了,如果真 ...

是先执行括号的,这样(b = a)就是a了,b+(b = a)-a 变成 b+a-a -->b,最后就将 b 的值给 a 了。而 a 值给 b,(b = a)已完成。(b = a)不会将前面的 b 存储的值冲掉吗?不会的,JVM会先将值存入栈(相当于用临时变量先保存),再运算处理。
作者: 黄秋    时间: 2012-2-18 05:30
hxc2008q 发表于 2012-2-18 02:12
同问八楼那个能用吗

怎么不去试试呢?7楼的也可,原理一样。




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