反转2d数组的行

iHe*_*eff 1 java arrays multidimensional-array

昨天我问了一个非常相似的问题,我有点搞砸了.

我需要将一个数组传递给一个方法,并且在该方法内部我需要交换行,如果是的话

1 2 3

3 2 1

2 1 3

它需要

3 2 1

1 2 3

3 1 2

使用我现在拥有的代码,它将最后一列正确地交换到第一个列点,然后将它放在应该是最后一列的列中.

3 1 2

1 3 2

3 2 1

此外,它需要保持空白,因为我需要修改原始数组,所以我不能将它设置为临时数组,但我可以使用临时整数来存储.

这是我现在的代码,有点工作

public static void reverseRows(int[][] inTwoDArray)
{
   for (int row = 0; row < inTwoDArray.length; row++)
   {
       for (int col = 0; col < inTwoDArray[row].length; col++)
       {
           int tempHolder = inTwoDArray[row][col];
           inTwoDArray[row][col] = inTwoDArray[row][inTwoDArray[0].length - 1];
           inTwoDArray[row][inTwoDArray[0].length - 1] = tempHolder;
       }
    }
 }
Run Code Online (Sandbox Code Playgroud)

任何帮助都会很棒,我的头发已用完了!谢谢!

Kub*_*tny 5

首先,如何反转单个1-D阵列:

for(int i = 0; i < array.length / 2; i++) {
    int temp = array[i];
    array[i] = array[array.length - i - 1];
    array[array.length - i - 1] = temp;
}
Run Code Online (Sandbox Code Playgroud)

请注意,您必须停在一半的数组中,或者将它交换两次(它与您开始时相同).

然后把它放在另一个for循环中:

for(int j = 0; j < array.length; j++){
    for(int i = 0; i < array[j].length / 2; i++) {
        int temp = array[j][i];
        array[j][i] = array[j][array[j].length - i - 1];
        array[j][array[j].length - i - 1] = temp;
    }
}
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用一些库方法,例如ArrayUtils#reverse():

ArrayUtils.reverse(array);
Run Code Online (Sandbox Code Playgroud)

然后再次进入一个循环:

for(int i = 0; i < array.length; i++){
   ArrayUtils.reverse(array[i]);
}
Run Code Online (Sandbox Code Playgroud)