Java基礎中Int類型變量值互換的幾種方法


    在很多時候,我們會使用到將兩個整型變量值進行互換,比如冒泡排序,通過判斷來將數組變量的值逐步交換,那么怎么交換值才能最有效最節省空間呢?

  首先,我們會想到的,用一個零時變量來做中間的過度存儲空間,這是很容易想到的方法,實現如下:

      int i = 10;  //聲明變量 i,並給 i 賦值為10

      int j = 20;  //聲明變量 j,並給 j 賦值為20

      int temp;  //聲明零時變量temp

      那么,我們要將變量 i 的值賦給變量 j ,就得通過零時變量temp存儲其中一個變量的值:

      temp = i ;   //將變量 i 值暫存於零時變量temp中,即temp = 10;

      i = j ;    //將變量 j 的值賦值給變量 i ,即 i = 20;

      j = temp ;    //將零時變量存放的值賦值給變量 j ,即 j = 10;

      這樣,我們就完成了最簡單的值互換。

  其次,既然我們需要互換的是int類型的變量,那么就可以進行數值運算及加減乘除來實現變量值的互換。

          int i = 10;  //聲明變量 i,並給 i 賦值為10

      int j = 20;  //聲明變量 j,並給 j 賦值為20

      i = i + j;  //將 i + j(10+20) 的和賦值給變量 i ,賦值后變量 i 的值為 30

      j = i - j;  //將 i - j(30-20) 的差賦值給變量 j ,賦值后變量 j 的值為 10

      i = i - j;  //再運算一次,將 i - j(30 - 10)的差賦值給變量 i ,賦值后變量 i 的值為 20

      這樣,我們也完成了兩個變量值的互換,這樣的好處是不需要第三個變量參與,節省了運行內存。

  最后,我們可以通過位運算中的異或運算(^)實現變量值的交換,異或運算是位運算,其規則是相同為0,不同為1,即1^0或0^1的取值為1,1^1或0^0的取值為0,實現如下:

         int i = 10;  //聲明變量 i,並給 i 賦值為10

         int j = 20;  //聲明變量 j,並給 j 賦值為20

      //其中變量 i 的值為10,其二進制編碼為:0000 1010

      //其中變量 j 的值為20,其二進制編碼為:0001 0100

      i = i ^ j ;  //即為 10 ^ 20 ,根據 ^ 的運算規則可知,其結果是 0001 1110 ,轉換成十進制為:24 + 23 + 2+ 2 = 30 ,

            //並將30賦值給變量 i ,即 i = 30

      j = i ^ j ;  //即為 30 ^ 20,其結果是 0000 1010,轉換成十進制為10,並將結果賦值給變量 j ,即 j = 10

      i = i ^ j ;  //即為 30 ^ 10,其結果是 0001 0100,轉換成十進制為20,並將結果賦值給變量 i ,即 i = 20 

      這種方式不需要使用零時變量,且是通過位運算,增加了其運算速度。

  總結,在完成代碼時,我們要在解決問題的同時思考更加高效率的解決方案,當然,我們也要明白不同方案的優點和缺點,雖然有些方案可以提高運行效率,比如上述的第三種方案,但是他沒有第一種方案直觀,並且效率也沒有說完全高太多,只要在可接受的運行時間和空間內解決問題,那么我們完全可以使用第一種更為簡單和直觀的方式解決問題。 


免責聲明!

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



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