黑马程序员技术交流社区
标题:
两个整数交换的几种方法与思考(Java版)
[打印本页]
作者:
sunriselzz
时间:
2013-6-21 21:17
标题:
两个整数交换的几种方法与思考(Java版)
本帖最后由 孙百鑫 于 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);
}
}
复制代码
change.jpg
(795.81 KB, 下载次数: 0)
下载附件
2013-6-21 21:16 上传
作者:
Kurt_cobain
时间:
2013-6-21 21:44
您这是总结吗?{:soso_e179:}
作者:
hacket
时间:
2013-6-21 22:12
package q_2013_03_23;
public class SwapDemo {
public static void main(String[] args) {
// 两个数交换
swap5(3,5);
}
// 第三方临时变量-temp
public static void swap1(int a,int b){
System.out.println("a="+a+":"+"b="+b);
int temp;
temp = a;
a = b;
b = temp;
System.out.println("a="+a+":"+"b="+b);
}
// 不用第三方临时变量-用加减-多行代码
public static void swap2(int a,int b){//a=3 b=5
System.out.println("a="+a+":"+"b="+b);
a = a + b;// a=a+b=3+5=8, b=b=5
b = a - b;// b=8-5=3
a = a - b;// a=8-3=5
System.out.println("a="+a+":"+"b="+b);
}
// 不用第三方临时变量-用异或-多行代码-效率高
public static void swap3(int a,int b){//a=3 b=5 a=00000011 b=00000101
System.out.println("a="+a+":"+"b="+b);
a = a ^ b;//a = 00000110,b=00000101
b = a ^ b;//b = 00000011=3, a = 00000110
a = a ^ b;//a = 00000101=5
System.out.println("a="+a+":"+"b="+b);
}
// 用一行代码实现交换,用加减
public static void swap4(int a,int b){
System.out.println("a="+a+":"+"b="+b);
b=a+b-(a=b);//b=3-(a=2)=1 //用一行代码实现交换
//或者a=b+a-(b=a);
System.out.println("a="+a+":"+"b="+b);
}
// 用一行代码实现,异或
public static void swap5(int a,int b){//a=3,b=5
System.out.println("a="+a+":"+"b="+b);
a = a^b^(b=a);//a=5,b=3
System.out.println("a="+a+":"+"b="+b);
b = b^a^(a=b);
System.out.println("a="+a+":"+"b="+b);
}
}
复制代码
作者:
sunriselzz
时间:
2013-6-21 23:55
hacket 发表于 2013-6-21 22:12
:handshake学习了
作者:
王延龙
时间:
2013-6-22 17:18
收藏下,{:soso_e100:}
作者:
孙百鑫
时间:
2013-6-22 21:57
楼主我已将您的帖子改成已解决
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2