黑马程序员技术交流社区

标题: 求两个整数互换的三种方式 [打印本页]

作者: hg3093483    时间: 2013-3-25 20:22
标题: 求两个整数互换的三种方式
本帖最后由 hg3093483 于 2013-3-25 21:34 编辑

求两个整数互换的三种方式,详细一些,最好带注释,谢谢

作者: 黑马-王鹏    时间: 2013-3-25 20:26

  1. <P> </P>
复制代码
  1. 对两个整数变量的值进行互换:

  2. (1)运用第三方变量

  3. int n = 3,m = 8;

  4. int temp;

  5. temp = n;

  6. n = m;

  7. m = temp;

  8. (2)不用第三方变量。

  9. n = n + m;//如果n和m的值非常大,容易超出int范围。

  10. m = n - m;

  11. n = n - m;

  12. (3)利用一个数异或另一个数两次得到的是原数

  13. n = n ^ m;

  14. m = n ^ m;//(n^m)^m;

  15. n = n ^ m;//n ^ (n ^ m
复制代码

作者: 张海洋    时间: 2013-3-25 20:29
将a与b的值相加得到一个ab , 让a的值等于 ab-a,这时a的值就变成原来b的值
在进行ab-b将其结果赋值给b,b的值变成原来a的值

               
int ab=a+b;
     a=ab-a;
      b=ab-b;

               
第二种方案        int c=a;
                    a=b;
             b=c;

第三种方案               
a=a^b; //这个时候a就代表的是b的值
b=a^b;  //    (a^b)^b
               
a=a^b;  //  (a^b)^a
               
                System.out.println(a+"  "+b);  //6   5


作者: itserious    时间: 2013-3-25 20:45
private static void swap3(int a, int b) {
                a=a+b;        //将ab之和负给a;
                 b=a-b;// b=a+b-b;     b== 原来的a;
                 a=a-b; //a=a+b-a    a==原来的b
               
                 System.out.println("a="+a+"b="+b);
        }

        private static void swap2(int a, int b) {
                a=a^b;
                 b=a^b;//b=(a^b)^b;  b==a(原来的a);
                a=a^b;//a=a^b^a ==> a==b(原来的b)
                System.out.println("a="+a+"b="+b);
        }

        private static void add1(int a, int b) {
                int temp=a; //记录原来的 a
                a=b;  // b负值给 a,
                b=temp;// 把原来的a负值给b
                System.out.println("a="+a+"b="+b);
        }
作者: 钟佩桓    时间: 2013-3-25 20:57
[img][/img]
作者: 钟佩桓    时间: 2013-3-25 20:57
  1. //比如将n和m的值互换
  2.                 1,通过第三方变量。
  3.                 int temp;//声明一个第三方变量
  4.                 temp = n;//将n的值赋值给temp  这是temp=n
  5.                 n = m;//  将m的值赋给n ,n=m
  6.                 m = temp;//  再将temp的值也就是n赋给m
  7.                 //这是比较常用想得到的方法

  8.                 2不用第三方变量。
  9.                 比如
  10.                 /*
  11.                 11 = 3 +  8;    先将两个数相加的和赋给n或m,这里给n
  12.                 3 = 11 - 8;                然后m还是原来的值 则n=和减m
  13.                 8 = 11 - 3;                同理
  14.                 */
  15.                
  16.                 n = n + m;//如果n和m的值非常大,容易超出int范围。
  17.                 m = n - m;
  18.                 n = n - m;
  19.                
  20.                 3,利用与的关系
  21.                 n = n ^ m;     //先将n和m相与赋给n 思路跟上面一样的

  22.                 m = n ^ m;//m=(n^m)^m;

  23.                 n = n ^ m;//n=n ^ (n ^ m)
复制代码

作者: HM何伟    时间: 2013-3-25 20:58
/**
需求:不使用第三方变量,让两变量交换位置.
*/

class SwapFunction{
        /*方法一:
                public static void main(String[] args)
                {
                        int x=6,y=45;
                        System.out.println("x="+x+","+"y="+y);//未换位之前
                        int temp=x;//temp=6
                                         x=y;//x=45
                                                y=temp;//y6
                        System.out.println("x="+x+","+"y="+y);//换位之后
                }
        */
        /*方法二:
                public static void main(String[] args)
                {
                        int x=4,y=9;
                System.out.println("x="+x+","+"y="+y);//未换位之前
                        x=x+y;//x=13
                        y=x-y;//y=4
                        x=x-y;//x=9
                System.out.println("x="+x+","+"y="+y);//换位之后
                }
        */
        //方法三:
                        public static void main(String[] args){
                                int x=3;
                                int y=7;
                                System.out.println("x="+x+","+"y="+y);//未换位之前
                                 x=x^y;//x^y
                                 y=x^y;//x^y^y
                                 x=y^x;//x^y^x
                                System.out.println("x="+x+","+"y="+y);//换位之后
                               
                        }
        /*方法四:
                public static void main (String[])
                {
                        int x=4,y=8;
                        System.out.println("x="+x+","+"y="+y);//未换位之前
                        x=(x+y-(y=x);
                        System.out.println();
                        System.out.println("x="+x+","+"y="+y);//换位之后
                }
       
        */
}

后面两种是不需要第三方变量,就能实现的.

作者: HM何伟    时间: 2013-3-25 21:02
我给你四种方法:后面两种是不需要第三方变量,就能完成交换的.
class SwapFunction{
        /*方法一:
                public static void main(String[] args)
                {
                        int x=6,y=45;
                        System.out.println("x="+x+","+"y="+y);//未换位之前
                        int temp=x;//temp=6
                                         x=y;//x=45
                                                y=temp;//y6
                        System.out.println("x="+x+","+"y="+y);//换位之后
                }
        */
        /*方法二:
                public static void main(String[] args)
                {
                        int x=4,y=9;
                System.out.println("x="+x+","+"y="+y);//未换位之前
                        x=x+y;//x=13
                        y=x-y;//y=4
                        x=x-y;//x=9
                System.out.println("x="+x+","+"y="+y);//换位之后
                }
        */
        //方法三:
                        public static void main(String[] args){
                                int x=3;
                                int y=7;
                                System.out.println("x="+x+","+"y="+y);//未换位之前
                                 x=x^y;//x^y
                                 y=x^y;//x^y^y
                                 x=y^x;//x^y^x
                                System.out.println("x="+x+","+"y="+y);//换位之后
                               
                        }
        /*方法四:
                public static void main (String[])
                {
                        int x=4,y=8;
                        System.out.println("x="+x+","+"y="+y);//未换位之前
                        x=(x+y-(y=x);//y=x=4,x=8
                        System.out.println("x="+x+","+"y="+y);//换位之后
                }
       
        */

}

作者: 罗平    时间: 2013-3-25 21:02
前面几位都说的方法都很好,建议平时写代码用借助第三变量的形式,程序易读,面试的时候可以用那种不借助第三方变量较好。




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