如题:假设n=13,m=41,对n和m中的值进行交换,使m=13,n=41
在毕祥东老师的视频中,给我们提供了三种方法可以实现这个功能
class Exchange{
public static void main(String[] args){
int m = 41;
int n = 13;
int temp = 0;
System.out.println("n="+n+"m="+m);
/*
第一种方法,借助第三方变量
temp = m ;
m = n ;
n = temp;
第二种方法,不借助第三方变量
n = n + m ;//用n的值保存n+m的值
m = n - m ;//(n+m)-m = n
n = n - m ;//(n+m)-(n+m-m)=m
*/
/*但是上述方法有一个限制,如果m和n的和大于n的范围时,此种方法就会失效*/
/*第三种方法,不借组第三方变量,利用异或运算 */
n = n ^ m ;
m = n ^ m ;//m=(n^m)^m = n
n = n ^ m ;//n=(n^m)^m = m
/* 第三种方法不会发生第二种方法那样超出范围的问题,但是需要一定的技巧,比较难想到。 */
System.out.println("n="+n+"m="+m);
}
}
从不借助第三方变量的两种方法中可以得到如下结论:
要实现不借助变量实现两个变量进行交换,通过一个其中的一个变量(如n)先保存两个变量进行某种运算的结果,只要这个结果能与剩下的变量(如m)进行运算得到n的值,然后n与m进行运算得到m的值。只要能够满足这样条件的运算都能实现不依靠第三方变量而实现两个变量值的交换。
如 n=n*m
m=n/m
n=n/m
上面这种方法也同第二种方法一样具有局限性。但是想通过这样的举例加深对第二种和第三种方法的理解。
上述纯属个人学习中想到一点感想,大侠们看了请注意牙齿。如果真能带给大家些许帮助,是吴之幸矣。
|