本帖最后由 孙百鑫 于 2013-6-22 21:57 编辑
两个整数交换的几种方法与思考(Java版)
各方法都写在一个类中,代码的重复度高,但是为了方便参照对比与演示
这些算法并不是在实际应用中都用到,而是为了探讨技术,展示程序设计的魅力。
- /**
- 两个整数交换的几种方法与思考(Java版)
-
- 各方法都写在一个类中,代码的重复度高,但是为了方便参照对比与演示
- 这些算法并不是在实际应用中都用到,而是为了探讨技术,展示程序设计的魅力。
- @author: sunriselzz
- */
- class SwapTwoNum
- {
- public static void main(String[] args)
- {
- swap1();
- swap2();
- swap3();
- swap4();
- }
- //方法一: 借助于第三方变量
- //原理:定义一个变量,把一个值临时存放在变量中,然后两个值相互交换
- public static void swap1(){
- int x=4;
- int y=2;
- System.out.println("\n借助于第三方变量\n 交换前: x="+x+" y="+y);
- int temp = x;
- x = y;
- y = temp;
- System.out.println(" 交换后: x="+x+" y="+y);
- }
- //方法二: 通过算术运算
- //两个变量值相加,相加后的值减去后一个变量值
- public static void swap2(){
- int x=4;
- int y=2;
- System.out.println("\n通过算术运算\n 交换前: x="+x+" y="+y);
- x = x + y; //变量x=6
- y = x - y; //变量y=6-2=4;
- x = x - y; //变量a=6-4=2;
- System.out.println(" 交换后: x="+x+" y="+y);
- }
- //方法三: 通过位运算
- //此算法能够实现是由异或运算的特点决定的,通过异或运算能够使数据中的某些位翻转,
- //其他位不变。这就意味着任意一个数与任意一个给定的值连续异或两次,值不变。
- public static void swap3(){
- int x=4;
- int y=2;
- System.out.println("\n通过位运算\n 交换前: x="+x+" y="+y);
- x = x ^ y;
- y = x ^ y; //y=x^y^y=x;
- x = x ^ y; //x=x^y^x=y;
- System.out.println(" 交换后: x="+x+" y="+y);
- }
- //方法四: 参照的高级版,没弄明白,所以没能写出来,期盼高手普及一下!
- //java中没有指针运算,"*"这个运算符还有其它的运算方式?
- public static void swap4(){
- int x=4;
- int y=2;
- System.out.println("\n参照的高级版\n 交换前: x="+x+" y="+y);
- y = x + 0 * (x = y);
- System.out.println(" 交换后: x="+x+" y="+y);
- }
- }
复制代码 |
|