这个问题应该交给我的嘛。作者: 陈晖 时间: 2013-4-25 12:22
针对数值类型的:
x=x+y;
y=x-y;
x=x-y;
这种是最给力的。:)作者: bianbian18 时间: 2013-4-25 13:01
第一种方法:
{
x = x ^ y;
y = x ^ y;
x = x ^ y;
}
这个方法效率最高哦~
第二种方法:
x=x+y;
y=x-y;
x=x-y;
这个方法不适合大数交换,可能会出错的哦~
第三种方法(当然是借用中间变量):
temp=x;
x=y;
y=temp;
还是借用第三方变量好一些,阅读性强且适合各种同类型间的交换哦!~作者: 袁梦希 时间: 2013-4-25 13:30
版主拎包郑重提示:如果楼主问题已经解决那么。在自己发表的帖子下面,点“修改”,
然后把主题的分类标记改成“已解决”。就OK了{:soso_e102:} 方便日后查找!作者: hacket 时间: 2013-4-25 17:39
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);
}
}
复制代码
这是我总结的两个数交换的几种方式。 作者: 吴波 时间: 2013-4-25 17:51
用^这个吧,异或的方式,里面只有1和0,1代表真,0代表假,只有1^1才为真,其他的全为假
x = x ^ y;
y = x ^ y;
x = x ^ y;作者: hacket 时间: 2013-4-25 18:12
补充一个
一行代码实现的交换:
public class OneLineSwap
{
public static void main(String[] args)
{
//一、用加减一行代码实现两个数的交换
int a = 3;
int b = 4;
System.out.println("交换前:"+"a = "+a+":"+"b = "+b);
//a = a+b-(b=a);
//b =a+b-(a=b);
b = a-b+(a=b);
System.out.println("交换后:"+"a = "+a+":"+"b = "+b);
System.out.println("==================");
//二、用异或一行代码
int x = 5;
int y = 8;
System.out.println("交换前:"+"x = "+x+":"+"y = "+y);
//x = x^y^(y=x);
y = x^y^(x=y);
System.out.println("交换后:"+"x = "+x+":"+"y = "+y);
}
}
复制代码
作者: DMY2008 时间: 2013-4-25 20:14
二楼那个同学说的很对。如果要交换数字,我们现在接触最多的就只有三种:第一种就是用第三方变量,这是大部分都知道的;第二种就是用+-来实现的 x = x+y;
y = x - y; x = x - y; 第三种就是面试时企业想要看到的一种方法:用异或来运算,x = x ^ y; y = x ^ y; x = x ^ y;
作者: 郑雪 时间: 2013-4-25 20:40
老师讲了两种方法,
第一种方法:
x=x+y;
y=x-y;
x=x-y;
第二种方法:用异或^来实现,一个数A异或同一个数B两次,结果是A。
x = x ^ y;
y = x ^ y;
x = x ^ y;
,看上面都有人回答了,我是不是来晚了,55555.作者: 郑雪 时间: 2013-4-25 20:40
老师讲了两种方法,
第一种方法:
x=x+y;
y=x-y;
x=x-y;
第二种方法:用异或^来实现,一个数A异或同一个数B两次,结果是A。
x = x ^ y;
y = x ^ y;
x = x ^ y;
,看上面都有人回答了,我是不是来晚了,55555.作者: 黑马-张超 时间: 2013-4-25 21:03
最快的方法就是异或!
x = x ^ y;
y = x ^ y;
x = x ^ y;
当然还有一种方法就是
x =x+y;
y = x-y
x =x-y;作者: 蒋名勇 时间: 2013-4-25 21:28
表示对异或运算不了解,明天问问老师去。不过用先加起来再减去另外一个,这个确实很妙,以前倒是没有自己考过自己,都是用个临时变量做的交换,老师还举了一个两杯水交换的很形象的例子。呵呵