2014-04-11 56 views
1

我使用此代碼爲交換2 d陣列中的行(A和B):交換2-d陣列中的行

public static void swapRows(int[][] array, int[] rowA, int[] rowB) { 
    int[] tempRow; 
    tempRow = rowA; 
    rowA = rowB; 
    rowB = tempRow; 
} 

但是調用此方法和顯示陣列之後,它沒有改變!

爲什麼?

+0

看起來你不會改變任何東西給我。你在哪裏把每行放入臨時行和rowA和rowB?您應該嘗試打印出行的內容。另外,這可以使用for循環完成。 –

+0

這可能是有用的閱讀,http://stackoverflow.com/questions/40480/is-java-pass-by-reference,它會幫助你瞭解如何在java中傳遞參數。 – Martin

回答

4

這是因爲你正在交換引用,這是通過值傳遞(我知道,這聽起來令人困惑,但這是Java所做的)。當你做這個任務時

rowA = rowB; 

變化的影響在你的功能裏面是可見的,而不是在它之外。爲了讓調用者看到效果,您需要在array對象上進行操作。

以下是方法:首先,將API更改爲採用索引而不是實際行。然後更改代碼以將這些索引用於二維數組中,如下所示:

public static void swapRows(int[][] array, int rowA, int rowB) { 
    int[] tempRow = array[rowA]; 
    array[rowA] = array[rowB]; 
    array[rowB] = tempRow; 
}