索引行矩阵的行反转的边界
问题描述:
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
?
答
你的代码将正常工作的一个迭代
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 = 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--;
}
希望这有助于。
答
我觉得你需要在每个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;
}
感谢您使我们这些编辑:) – DanBan
没问题,运气好得到援助。 – csmckelvey