上課時候正好講到交換變量,學生說我借助第三方變量來交換好low,哈哈。好吧...
我來總結下我知道的,java的一些交換變量的方式。來人啊,代碼伺候:
package test; public class Test { public static void main(String[] args) { int a, b; a = 10; b = 12; System.out.println(a + " " + b); /* * 借助第三方變量 這種算法易於理解,特別適合幫助初學者了解計算機程序的特點,是賦值語句的經典應用。 * 在實際軟件開發當中,此算法簡單明了,不會產生歧義,便於程序員之間的交流。 一般情況下碰到交換變量值的問題,都應采用此算法(標准算法)。 */ int temp = a; a = b; b = temp; System.out.println(a + " " + b); /* * 算術算法 它的原理是:把a、b看做數軸上的點,圍繞兩點間的距離來進行計算。 具體過程: * 第一句“a=b-a”求出ab兩點的距離,並且將其保存在a中; * 第二句“b=b-a”求出a到原點的距離(b到原點的距離與ab兩點距離之差),並且將其保存在b中; * 第三句“a=b+a”求出b到原點的距離(a到原點距離與ab兩點距離之和),並且將其保存在a中。完成交換。 * 此算法與標准算法相比,多了三個計算的過程,但是沒有借助臨時變量。(算術算法) */ a = b - a; b = b - a; a = b + a; System.out.println(a + " " + b); /* * 異或 相同為1 不同為0 此算法能夠實現是由異或運算的特點決定的,通過異或運算能夠使數據中的某些位翻轉,其他位不變。 * 這就意味著任意一個數與任意一個給定的值連續異或兩次,值不變。 * 即:a^b^b=a。將a=a^b代入b=a^b則得b=a^b^b=a;同理可以得到a=b^a^a=b;輕松完成交換。 */ a = a ^ b;// 1010 ^ 1100 1001 b = a ^ b;// 1001 ^ 1100 1010 a = a ^ b;// 1001 ^ 1010 1100 System.out.println(a + " " + b); } }
個人覺得異或好玩點。