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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hg3093483 中级黑马   /  2013-3-25 20:22  /  2299 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 hg3093483 于 2013-3-25 21:34 编辑

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

点评

如果你的问题已经得到解决,请及时将主题改为[已解决],如果还有问题请继续追问,谢谢!  发表于 2013-3-25 21:32

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

8 个回复

倒序浏览

  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
复制代码
回复 使用道具 举报
将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

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

回复 使用道具 举报
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);
        }

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

回复 使用道具 举报
[img][/img]
回复 使用道具 举报
  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)
复制代码
回复 使用道具 举报
/**
需求:不使用第三方变量,让两变量交换位置.
*/

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);//换位之后
                }
       
        */
}

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

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

回复 使用道具 举报
我给你四种方法:后面两种是不需要第三方变量,就能完成交换的.
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);//换位之后
                }
       
        */

}

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

回复 使用道具 举报
罗平 中级黑马 2013-3-25 21:02:44
9#
前面几位都说的方法都很好,建议平时写代码用借助第三变量的形式,程序易读,面试的时候可以用那种不借助第三方变量较好。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马