1. 程式人生 > >Java基礎中Int型別變數值互換的幾種方法

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 

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

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