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
?
答案 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;
}