反转2D数组的每一行

时间:2015-04-15 09:10:18

标签: java arrays reverse

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

含义,如果这是输入数组:

  

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();
        }
    }
}

2 个答案:

答案 0 :(得分:1)

  

我想反向打印数组的每一行

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

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++) {

答案 1 :(得分:1)

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

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

这就是我得到的:

  

反向[0] [0] =前进[2] [2]
  反向[0] [1] =前进[2] [1]
  reverse [0] [2] = forward [2] [0]
  反向[1] [0] =前进[1] [2]
  反向[1] [1] =前进[1] [1]
  反向[1] [2] =前进[1] [0]
  反向[2] [0] =前进[0] [2]
  反向[2] [1] =前进[0] [1]
  反向[2] [2] =前进[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];
    }
}

这样我们就可以获得所需的行为:

  

反向[0] [0] =前进[0] [2]
  reverse [0] [1] = forward [0] [1]
  reverse [0] [2] = forward [0] [0]
  反向[1] [0] =前进[1] [2]
  反向[1] [1] =前进[1] [1]
  反向[1] [2] =前进[1] [0]
  反向[2] [0] =前进[2] [2]
  反向[2] [1] =前进[2] [1]
  反向[2] [2] =前进[2] [0]

相关问题