兩個int變數交換值的一些方式(巧用異或)
阿新 • • 發佈:2019-01-24
兩個int變數交換值輸出,我們程式設計的時候一般都是引入第三個變數temp,這種方式大家都知道,但是筆試題的時候往往都會限制用第三個變數,這時候也簡單,大家的第一反應是不是都是
int x = 3;
int y = 4;
x = x + y; //x = 7
y = x - y; //y = 4
x = x - y; //x = 3
System.out.println("x = "+ x +" , y = " + y);
然後,這裡存在一個問題,就是int是有範圍的,x = x + y可能會出現超限的問題。有一次被這麼一問,有點懵逼,當時沒想到怎麼回答,回來後,才想到用異或。異或有個性質:一個數對另一個數異或兩次,數值不變。(大致秒數是這樣),所以呢,我們這裡可以這麼寫。
int x = 3;
int y = 4;
x = x ^ y; //x = 3 ^ 4
y = x ^ y; //y = 3 ^ 4 ^ 4 = 3
x = x ^ y; //x = 3 ^ 4 ^ 3 = 4
System.out.println("x = "+ x +" , y = " + y);
另外,我們還可以一句好搞定,但是不推薦這樣寫,容易被人把頭給打裂。
int x = 3; int y = 4; //同學我跟你講,一定要這麼寫,顯得多高階啊。一寫出來,我保證你頭被打裂咯 y = ( x + y ) - ( x = y); //3 + 4 -4 System.out.println("x = "+ x +" , y = " + y);
當然你還可以搞個函式,傳兩個變數進去,然後直接返回交換的值。但是這些都不是最簡單的,下面介紹最簡單的方法
int x = 3;
int y = 4;
System.out.println("x = "+ y +" , y = " + x);
列印的時候直接交換變數位置,皮這一下,我很開心,不爽你又打不到我。(PS.臨時加的,寫到一半想總結一下所有的方法,查了一下看到這裡有人這麼皮過,我也皮一下,連結https://www.cnblogs.com/Brad-Lee/p/5808299.html)