反转二维数组的每一行

Reverse each row of a 2D array

我想创建一个二维数组的反转数组,这样原始数组的每一行都反转(没有反转列)。

意思是,如果这是输入数组:

1 2 3
3 2 1
2 1 3

这就是所需的输出:

3 2 1
1 2 3
3 1 2

问题是我得到的输出是完全错误的。

这是我的代码:

public class Test {
    public static void main(String[] args) {
        int[][] forward = { 
                { 1, 2, 3 }, 
                { 3, 2, 1 }, 
                { 2, 1, 3 } 
            };

        int rows = forward.length;
        int cols = forward[0].length;
        int[][] reverse = new int[rows][cols];

        for (int i = rows - 1; i >= 0; i--) {
            for (int j = cols - 1; j >= 0; j--) {
                reverse[rows - 1 - i][cols - 1 - j] = forward[i][j];
            }
        }

        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < cols; j++) {
                System.out.print(reverse[i][j]);
                if (j < cols - 1)
                    System.out.print(", ");
            }
            System.out.println();
        }
    }
}

I want to print reverse every row of my array

问题是在你的循环中你不仅要反转列,还要反转行

reverse[rows - 1 - i][cols - 1 - j] = forward[i][j];

这导致数组旋转 180 度。

如果您只想反转行的内容,这意味着您想要反转它们列的顺序(您已经处理过)。所以而不是

reverse[rows - 1 - i][cols - 1 - j] = forward[i][j];

使用

reverse[i][cols - 1 - j] = forward[i][j];// change only columns  
//      ^--------------------------^     // rows should stay the same

顺便说一句,您不必以相反的顺序遍历行或列

for (int i = rows - 1; i >= 0; i--) {

简单的前向 for 循环也可以解决问题,并且更具可读性

for (int i = 0; i < rows; i++) {

在您的反向循环中添加了以下行:

System.out.println("reverse[" + (rows - 1 - i) + "][" + (cols - 1 - j) + "] = forward[" + i + "][" + j + "]");

这就是我得到的:

reverse[0][0] = forward[2][2]
reverse[0][1] = forward[2][1]
reverse[0][2] = forward[2][0]
reverse[1][0] = forward[1][2]
reverse[1][1] = forward[1][1]
reverse[1][2] = forward[1][0]
reverse[2][0] = forward[0][2]
reverse[2][1] = forward[0][1]
reverse[2][2] = forward[0][0]


你正在做的是混合行。

您的反向循环应该遍历 forwardreverse 的相同行号:

for (int i = 0; i < rows; i++) {
    for (int j = cols - 1; j >= 0; j--) {
        reverse[i][cols - 1 - j] = forward[i][j];
    }
}

这样我们就得到了想要的行为:

reverse[0][0] = forward[0][2]
reverse[0][1] = forward[0][1]
reverse[0][2] = forward[0][0]
reverse[1][0] = forward[1][2]
reverse[1][1] = forward[1][1]
reverse[1][2] = forward[1][0]
reverse[2][0] = forward[2][2]
reverse[2][1] = forward[2][1]
reverse[2][2] = forward[2][0]