a=1,b=2,不用第三个变量,a,b互换?

解决方案 »

  1.   

    或者
    a=a^b
    b=b^a
    a=a^b
      

  2.   

    a=b;
    b=a-1;
    结果:a=2,b=1
    呵....
    从理论上分析,不用中间变量作中介,这是不可能完成的任务,就如两杯水,没有第三只杯子,你能相互倒来倒去吗?
      

  3.   

    老兄,你这只能用于整型吧?
    如果:a="a";b="b";
    能这样加来减去的么?
    变量也不一定是字符串,单个字符或其它对象变量也行吧?多的呢,没有临时的中间变量,不可能有通用的方法的.
      

  4.   

    LZ不是a=2 b=1么 又没说一定要通用的方法
    虽然我觉得3楼的方法可能会通用一点
      

  5.   

    a一定等于1,一定等于2吗?
    如果是这样那就简单了。
    a=2
    b=1
    搞定。
      

  6.   

    这问题只怕早在CSDN出现之前就被讨论烂了。。
      

  7.   

    int a = 4;
    int b = 99;

    System.out.println(a);
    System.out.println(b);

    a = a + b;
    b = a - b; 
    a = a - b;

    System.out.println(a);
    System.out.println(b);
    这方法很好呀,通用  
      

  8.   

    a=a op b;
    b=a ^op b;
    a=a ^op b;
      

  9.   


    1楼正解。3楼的兄弟,没有中间变量,依然可以互换的。这个算法不止适合int,char类型依然可以,如:
    char a = 'c',b = 'f';
    a = (char)(a + b);
    b = (char)(a - b);
    a = (char)(a - b);
      

  10.   

    其实lz可能要的就是1楼的效果,但如果是下面的情况就需要好好考虑了
    object o1;
    object o2;
    o1,o2互换
      

  11.   

     初学JAVA的时候,孙鑫的教程里就说过 
      

  12.   


    public class Cab {
    public static void main(String[] args){
    int a=1;
    int b=2;
    a=a+b;
    b=a-b;
    a=a-b;
    System.out.println("a="+a+"b="+b);
    }}
    //输出a=2b=1
      

  13.   


    晕.我说的是字符串,你怎么变为字符了呢?
    String a = "aaa";
    String b = "bbb";a = a + b; 
    b = a - b; 
    a = a - b; 
    请问这个成立吗?至少到现在为止,java还没有出现字符串相减的吧?
    对于字符串,下面才是正解:
    a = a + b; 
    b = a.replace(b, ""); 
    a = a.replace(b, ""); 对于其它类型的,就不一而足了,对于整型,一楼是正解(2楼也行),但如果说要通用的,我还是那句话,这是不可能的!
    整型和字符串或字符型可能能做个通用的,但若其它类型也能做到通用,那我只能服了你了.
    高手继续扔砖头吧,呵
      

  14.   

    这问题讨论过臭了
    push a
    push b
    pop a
    pop b
      

  15.   


    还是用这个好吧
    a=a^b 
    b=b^a 
    a=a^b 下面这个虽然也是可以,但是有范围限制的
    a=a+b 
    b=a-b 
    a=a-b
      

  16.   

    a = a^b;
    b = b^a;
    a = a^b;
      

  17.   

    上边的写错了。
    a = a^b;
    b = a^b;
    a = a^b;
      

  18.   

    楼主没说变量是什么类型,上面的做法都是片面的,1,2,谁说就是10进制了?八进制,16进制的也行啊,double的好像也可以吧?
    如果楼主是这样写的,int a=1;int b=2,那答案早有了.如果是这样写的,double a=1;double b=2;上面的答案显然不大行吧?
      

  19.   

    其实这只是一个考验人的数学题;真正在java或其他语言中,这种写法并不见得运算速度快,说不定在系统自己还是定义了个中间变量(看不到的),所以还是用中间变量好,代码好理解。1楼正解~~
      

  20.   

    可以考虑用数组来进行两个变量的交换,参见:http://www.jslab.org.cn/?tag=SwapVar
    <script type="text/javascript">
    var a = 1,b = 2;
    a = [b,b=a][0];
    alert(a);
    alert(b);
    </script>
      

  21.   

    想问一下变量的意思是什么?
    我的理解是内存空间,
    你不申请新的内存空间如何交换2个变量?
    无论是a=a+b还是a=a.replace(b,''),好像都开辟了新的内存空间了吧,只是没起第三个变量名而已吧~比如整形变量
    a=x,b=ya=a+b内存中必定要分配一个新的空间存放x+y
    b=a-b
    a=a-b

    c=a+b
    b=c-b
    a=c-b
    对内存空间来说,有区别吗?
    高手指教,对不对、?
      

  22.   

    a=a^b 
    b=b^a 
    a=a^b 
      

  23.   

    这样可以不!没测试!你们看看吧!
    String a;
    String b;
    a=b+a;
    b=a.substring(b.length);
    a=a.substring(0,b.length);//返回一个新字符串,它是此字符串的一个子字符串。该子字符串从指定的 beginIndex 处开始,直到索引 endIndex - 1 处的字符。因此,该子字符串的长度为 endIndex-beginIndex。 
      

  24.   

    你说的是错的!~
    a=a+b是不会分配新的内存空间的,a+b的结果直接就存放在a的内存空间里
    c=a+b必然会分配内存给c,但这不意味着是为a+b分配的内存空间
    如果按照你的意思,那c=a+b不是要占4年变量的内存空间了 *_*
      

  25.   

    a=a^b 
    b=b^a 
    a=a^b 
    这个方法要比用算术运算的方法好
    不但可以避免溢出的问题,而且通用性更好
    因为这个算法是交换了两个内存的值
    而不是凑巧运算出来的
      

  26.   

    这种方式也可以,但有点bug,我小改如下:
    a=b+a; 
    b=a.substring(0,b.length+1); 
    a=a.substring(b.length);
      

  27.   

    int a=1;
    int b=2;a=2;
    b=1;printf("a=2,b=1");
    这才是正解
      

  28.   


    还是这个方法好,对int型的最大值最小值照样不会出错,强
      

  29.   

                    int a = 1;
    int b = 2;
    System.out.println("=a="+a+"=b="+b);
    a = a<<1;
    b = b>>1;
    System.out.println("=a="+a+"=b="+b);
      

  30.   

    面试题
    a=a+b 
    b=a-b 
    a=a-b
      

  31.   


    package com;public class Test
    {
        public static void main(String[] args)
        {
            int a = 1;
            int b = 2;        a = a ^ b;
            b = b ^ a;
            a = a ^ b;
            System.out.println(a);
            System.out.println(b);        a = a + b;
            b = a - b;
            a = a - b;
            System.out.println(a);
            System.out.println(b);
        }
    }