Java中的2D Int数组反转

时间:2017-04-05 21:40:37

标签: java arrays multidimensional-array

我遇到的问题是我必须创建一个程序,它使用一个对象来反转2D数组中每行的元素并打印出结果矩阵。我的代码只反向打印出每行的前3个数字。这是我的代码:

class Reverse {

    void matrixReverse(int[][] data) {
        int row_val = data.length;
        int col_val = data[0].length;

        int[][] data_reverse = new int[row_val][col_val];

        for(int row = row_val - 1; row >= 0; row--){
            for(int col = col_val - 1; col >= 0; col--){
                data_reverse[row_val - 1 - row][col_val - 1 - col] = data[row][col];
            }
        }
        for(int row = 0; row < row_val; row++){
            for(int col = 0; col < col_val; col++){
                System.out.println(data_reverse[row][col]);
            }
            System.out.println();
        }
    }
}

public class ArrayReverse {

    public static void main(String[] args) {
        int[][] data = {
            {3, 2, 5},
            {1, 4, 4, 8, 13},
            {9, 1, 0, 2},
            {0, 2, 6, 3, -1, -8}
        }; // Creates the array

        Reverse reverse = new Reverse();
        reverse.matrixReverse(data);
    }
}

输出结果为:

6
2
0

0
1
9

4
4
1

5
2
3

正如您所看到的,它只打印行的前3个数字,但我需要它来打印所有行。

1 个答案:

答案 0 :(得分:2)

您的列是可变宽度的,但您从第一行获得宽度(可能甚至不存在!)。在访问数组之前,您需要检查数组的大小。您还可以切换数组大小参数,首先从行开始。

要解决您的特定问题,您需要为行循环内的每一行设置col_val。

void matrixReverse(int[][] data) {
    int rowWidth = data.length;
    int[][] reversedData = new int[rowWidth][];
    for (int row = rowWidth - 1; row >= 0; row--) {
        int colWidth = data[row].length;
        int reverseRow = rowWidth - 1 - row;
        reversedData[reverseRow] = new int[colWidth];
        for (int col = colWidth - 1; col >= 0; col--) {
            int reverseCol = colWidth - 1 - col;
            reversedData[reverseRow][reverseCol] = data[row][col];
        }
    }
    for (int row = 0; row < rowWidth; row++) {
        int colWidth = reversedData[row].length;
        for (int col = 0; col < colWidth; col++) {
            System.out.println(reversedData[row][col]);
        }
        System.out.println();
    }
}

P.S。 row_val和col_val是错误的名称。它们的宽度不是值,Java中的命名约定是colWidth,rowWidth不是col_width或row_width。