【Java】不使用第三方變量交換兩個變量的值


在語言學習和進行程序設計的時候,我們交換兩個變量最常使用的方法是借助temp這個新的變量進行轉換,代碼如下:

-----------------------------------------

<--標准算法-->

-----------------------------------------

int a = 3, b = 4;

int temp = a;

a = b;

b = temp;

-----------------------------------------

這種方法易於理解,特別適合初學者了解計算機程序的特點,是賦值語句的經典應用,在實際開發中,此法簡單明了,不會產生歧義,便於交流。

但是這個算法的弊端是需要借助第三方變量--臨時變量,效率不是很高。

-----------------------------------------

下面介紹不借助臨時變量怎么進行轉換的方法

1、算術算法

簡單而言,就是普通的 + 和 - 的運算來實現,代碼如下:

-----------------------------------------

int a = 3, b = 4;

a = a+b;

b = a-b;

a = a-b;

-----------------------------------------

算術原理是:把a、b看做數軸上的點,圍繞兩點間的距離來進行計算。 

具體過程:

第一句“a = a+b”求出ab兩點的距離之和,並且將其保存在a中;

第二句“b = a-b”求出a到原點的距離,並且將其保存在b中;

第三句“a = a-b”求出b到原點的距離,並且將其保存在a中。

完成交換。 

此算法與標准算法相比,多了三個計算的過程,但是沒有借助臨時變量

2、異或算法

通過異或運算也能實現變量的交換,這也許是最為神奇的,請看以下代碼:

-----------------------------------------

int a = 3, b = 4;

a = a^b;

b = a^b;

a = a^b;

-----------------------------------------

此算法能夠實現是由異或運算的特點決定的,通過異或運算能夠使數據中的某些位翻轉,其他位不變。這就意味着任意一個數與任意一個給定的值連續異或兩次,值不變。 即:

a^b^b=a。將a=a^b代入b=a^b則得b=a^b^b=a;同理可以得到a=b^a^a=b;輕松完成交換。

異或運算最大的好處是直接進行二進制數據操作,大大節約了轉換的時間效率。

-----------------------------------------

嘮叨兩句:

數學中的小技巧對程序設計而言具有相當的影響力,運用得當會有意想不到的效果。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM