我想创建一个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();
}
}
}
答案 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]
你正在做的是混合行。
您的反向循环应该覆盖forward
和reverse
的相同行号:
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]