黑马程序员技术交流社区

标题: 对两个整数变量的值进行互换 (不需要第三方变量) [打印本页]

作者: 1961993790    时间: 2013-10-23 22:15
标题: 对两个整数变量的值进行互换 (不需要第三方变量)
本帖最后由 1961993790 于 2013-10-25 08:55 编辑

怎样实现 int a = 3,b = 5; 两个数的交换,不使用第三方便量。
作者: 寻丶丶觅    时间: 2013-10-23 22:25
一个值被^两次后还是原来的值.
a = a^b;
b = a^b;这里相当于a^b^b;结果是a;
a = a^b;这里相当于a^b^a^b^b;

作者: 张运    时间: 2013-10-23 22:25
方法很多。你可以使用位运算,简单的算术运算的方法.
这是使用简单的算术运算的方法
int a,b;  
a=b-a;  
b=b-a;
a=b+a;
作者: 枫儿    时间: 2013-10-23 22:27
嗯。可以这样a=a+b
                  b=a-b
                  a=a-b

然后还可以异或运算a=a^b
                           b=a^b
                           a=a^b
作者: 张文豪    时间: 2013-10-23 22:29
毕老师课上不是讲到了么 异或。
a= a^b;
b=a^b;
a=a^b;

作者: 杨增坤    时间: 2013-10-23 23:55
  1. public class Demo {
  2.    public static void main(String [] agrs){
  3.           int m=2,n=3;
  4.           //method_1(m, n);
  5.           // method_2(m, n);
  6.           method_3(m, n);
  7.    }
  8.    /**
  9.     * 使用异或^
  10.     *明白一个数,如果异或同一个数两次,那么就等于本身
  11.     */
  12. private static void method_3(int m, int n) {
  13.         m=m^n;
  14.           n=m^n;
  15.           m=m^n;
  16.           System.out.println("m="+m+"\tn="+n);
  17. }
  18.    /**
  19.     * 使用自身的数组,加减运算
  20.     */
  21. private static void method_2(int m, int n) {
  22.         m=m+n;
  23.            n=m-n;
  24.            m=m-n;
  25.            System.out.println("m="+m+"\tn="+n);
  26. }
  27. /**
  28. * 利用中间变量
  29. */
  30. public static void method_1(int m, int n) {
  31.         int t=m;
  32.           m=n;
  33.           n=t;
  34.           System.out.println("m="+m+"\tn="+n);
  35. }
  36. }
复制代码

作者: doitforyou    时间: 2013-10-24 00:01
本帖最后由 doitforyou 于 2013-10-24 00:03 编辑

楼上的方法都是对的,我只是提供下简写方法:
a = b+(b=a)-a;
这种方法主要根据运算的优先级来实现的,经过代码验证,希望能帮助你。
作者: 冯超    时间: 2013-10-24 08:28
java没有指针
在内存中
a     ------------------>3
b    ------------------->5
要使得a指向5这个常量有两种方式,1.a = 5,则a指向3的那个引用就自动消失; 2 a = b 则a和b同时指向5的这个引用,
           但是如何让b指向3(变量)这个引用了,就需要一个标记,这个标记指向3,所以需要第三个变量。
我想不通你为什么会问这个问题了? 用第三个变量是很好的一个思路。楼上的哥们帮你解决的方法我觉得并不可取。
作者: 乔兵    时间: 2013-10-25 08:20
楼主你好,如果问题已解决请将帖子状态修改为提问结束,

如果未解决请继续提问,谢谢合作

修改方法请看解释帖:http://bbs.itheima.com/thread-89313-1-1.html
作者: lijiansheng    时间: 2015-6-4 20:21
方法一:
a = a + b;
b = a - b;
a = a - b;
方法二:
a = a * b;
b = a / b;
a = a / b;
方法三:
a = a ^ b;
b = a ^ b;
a = a ^ b;
作者: 伊利    时间: 2015-10-31 23:13
66666666666666666666




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