索引矩阵行反转的界限

时间:2017-03-17 20:42:42

标签: java matrix

public static int [][] reverseRows (int [][] matrix ) {
    int i, j, k = (matrix.length - 1), l = (matrix[0].length - 1);
    int [][] rr = new int[matrix.length][matrix[0].length];

    for(i = 0; i < matrix.length; i++) {
        for(j = 0; j < matrix[i].length; j++)
            rr[k][l--] = matrix[i][j]; // <--- This line
        k--;
    }
    printMatrix(rr);
    return matrix;
}

我试图将作为参数传递的矩阵中的行反转,并且我已经提出了这个装置。它适用于1x1矩阵,原因很明显,但不适用于其他人,我收到了这个错误:

  

java.lang.ArrayIndexOutOfBoundsException:-1

在评论指示的行上。所以我的l迭代器显然被索引太远,超过0(到-1,如果我的眼睛不会欺骗我)。不会l重复与j相同的次数吗?由于它们的大小相同,为什么j不会读到matrix的结尾,但l正在读过rr

2 个答案:

答案 0 :(得分:0)

您的代码将在一次迭代中正常工作

for(i = 0; i < matrix.length; i++) {
        for(j = 0; j < matrix[i].length; j++)
            rr[k][l--] = matrix[i][j]; // <--- This line
        k--;
    }

您必须再次为下一次迭代分配l l = matrix[0].length-1

for(i = 0; i < matrix.length; i++) {
        l = matrix[0].length - 1; // <--- This line
        for(j = 0; j < matrix[i].length; j++)
            rr[k][l--] = matrix[i][j]; 
        k--;
    }

希望这有帮助。

答案 1 :(得分:0)

我认为你需要在每个j循环之后重新分配'l'的值,就像你的代码那样,变量'l'正在递减i * j次。 尝试类似:

public static int [][] reverseRows (int [][] matrix ) {
    int i, j, k = (matrix.length - 1), l = (matrix[0].length - 1);
    int [][] rr = new int[matrix.length][matrix[0].length];

    for(i = 0; i < matrix.length; i++) {
        l = (matrix[0].length - 1);
        for(j = 0; j < matrix[i].length; j++)
            rr[k][l--] = matrix[i][j]; // <--- This line
        k--;
    }
    printMatrix(rr);
    return matrix;
}