从 2D 数组返回一列数组



我试图输入一个二维数组并返回一个表示数组数组的列j的数组。我得到一个数组越界异常,我在其中定义了 int col 变量。

当我在多重数组上运行它时:{{1,3,8}, {4,9,2}, {6,11,14}, {24,6,1}}它返回 [1, 1, 1, 1]

public static int[] getColumn(int[][] grid, int j) {
    int[] result = { 0 };
    int row = grid.length;
    int col = grid[row -1].length;
    for (int i = 0; i < col; i++) {
        for (int p = 0; p < row; p++) {
            if (j == i) {
                int[] colJ = new int[row];
                for (int k = 0; k < row; k++) {
                    colJ[k] = grid[p][j];
                }
                result = colJ;
            }
        }
    }
    return result;
}

在 Java 数组索引中,索引从 "0" 开始。因此,您必须更改周期: for (int i = 1; i <= col; i++) { for (int i = 0; i < col; i++) {和嵌套循环。例如,如果你有 3X3 矩阵,左顶元素将有索引 [0][0] 和右下元素 [2][2],但通过你的实现,你将得到 [3][3]在这里:grid[p][j]

这是我的实现:

public static int[] getColumn(final int[][] grid, final int j) {
    final int index = j - 1; // if we search for 1st element his index is 0, 2nd -> 1, etc.
    final int[] result = new int[grid.length];
    for (int i = 0; i < grid.length; i++) {
        result[i] = grid[i][index]; // take from each sub-array the index we're interesting in
    }
    return result;
}

输出:网格 {{1,3,8}, {4,9,2}, {6,11,14}, {24,6,1}} 和 j = 2 的 {3, 9, 11, 6}

更改

int col = grid[row].length;

int col = grid[row - 1].length;

最新更新