黑马程序员技术交流社区
标题:
变量互换 请教!
[打印本页]
作者:
睡不够的猪
时间:
2013-9-4 12:22
标题:
变量互换 请教!
本帖最后由 黄兴旺 于 2013-9-4 13:46 编辑
视频课里边有一个题目是这样的: 进行变量互换(要求不使用第三方变量)
老师写的是这样的:
n=3,m=8;
n=n^m;
m=n^m; //这个地方还能理解,相当于一个数两次异或同一个数,结果还是原来那个数,这样n的值就被赋予了m
n=
n
^m; //这里的
n
是表示原来的n 还是第一次变换之后的n呢?
作者:
王松松
时间:
2013-9-4 12:36
其实,n = n^m , m= n = (n^m)^m =n^m
那么,n = m = (n^m)^n = n^m
希望对你有帮助!
作者:
吴光新
时间:
2013-9-4 12:46
给你一个经典的:n=m+(m=n)-n
作者:
薛鹏鹏
时间:
2013-9-4 12:47
n=3,m=8;
n=n^m;
m=n^m;// m = (n^m ) ^m =n
n=n^m; // n = (n^m ) ^ n = m
作者:
肥猫
时间:
2013-9-4 12:52
/**
功能:交换两个变量中的数值。
*/
class TTT
{
public static void main(String[] args)
{
//方法一
System.out.println("方法一:");
int a=5,b=3;
System.out.println("转换前a="+a+","+"b="+b);
a=a^b;
b=a^b;
a=a^b;
System.out.println("转换后a="+a+","+"b="+b);
System.out.println();
//方法二:
System.out.println("方法二:");
int c=7,d=9,temp=0;
System.out.println("转换前c="+c+","+"d="+d);
temp=c;
c=d;
d=temp;
System.out.println("转换后c="+c+","+"d="+d);
System.out.println();
//方法三:
System.out.println("方法三:");
int i=3,j=7;
System.out.println("转换前i="+i+","+"j="+j);
i=i+j;
j=i-j;
i=i-j;
System.out.println("转换后i="+i+","+"j="+j);
System.out.println();
//方法四:
int o = 3,m = 5;
System.out.println("转换前o="+o+","+"m="+m);
o = m + (m = o) - m;
System.out.println("转换后o="+o+","+"m="+m);
}
}
复制代码
作者:
黄兴旺
时间:
2013-9-4 12:56
class Test
{
public static void main(String[] args)
{
int n=3,m=8;
n=n^m;//n的值变为11,m的值不变,还是8。
System.out.println("n1="+n);
System.out.println("m1="+m);
m=n^m;//n的值还为11,m=(n^m)^m=(3^8)^8=3;
System.out.println("n2="+n);
System.out.println("m2="+m);
n=n^m; //n=(n^m)^m=(3^8)^3=8,m=3;
System.out.println("n3="+n);
System.out.println("m3="+m);
}
}
复制代码
作者:
.....淡定
时间:
2013-9-4 13:14
肥猫 发表于 2013-9-4 12:52
方法一和方法三那个效率高啊。我一直以为方法三效率高
作者:
EYE_SEE_YOU
时间:
2013-9-4 13:14
答案大家已经告诉你了
我就告诉你点别的吧
这个变量互换的技巧性较强
并且不需要第三方变量
所以一段时间前很受欢迎
虽然如此,但是它也有局限性
就是必须要保证两个变量不相等
否则其中一个变量会变成0
因此在实际开发中
大家用的是第三方变量的方法
作者:
睡不够的猪
时间:
2013-9-4 13:35
弄明白了 谢谢大家的解答和温馨提示,在这里就不做一一回复了 感谢感谢!{:soso_e183:}
作者:
Development...
时间:
2013-9-4 19:33
看你的变量互换是使用亦或.这个是根据两个对象的值的二进制进行位移的手法
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2