交换2-D阵列行

时间:2014-04-11 17:37:40

标签: java arrays

我使用此代码交换2-d数组行(A和B):

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

但是在调用此方法并显示数组后,它根本没有改变!

为什么?

1 个答案:

答案 0 :(得分:4)

这是因为你交换了引用值,这些引用是按值传递的(我知道,这听起来很混乱,但这就是Java所做的)。当你做这个作业

rowA = rowB;

更改的效果在您的功能中可见,而不是在其外部。为了使调用者可以看到效果,您需要对array对象进行操作。

以下是:首先,更改API以获取索引而不是实际行。然后更改代码以将这些索引用于2D数组,如下所示:

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