我需要以蛇形形式打印矩阵。因此,对于此矩阵,输出应为:
我的问题是这段代码抛出ArrayIndexOutofBounds。我该如何处理以避免这种情况?
int[][] mat= {{1,2,3},{4,5,6},{7,8,9}};
int row=mat.length;
int col=mat[0].length-1;
int c=col;
int r=0;
while(r < row) {
for(int j=c;j>=0;j--) {
// System.out.print("r: " + r);
// System.out.print(" " + mat[r][j]);
}
r=r+1;
for(int j=0;j<=c;j++) {
// System.out.print("r: " + r);
//System.out.print(" " + mat[r][j]);
}
r=r+1;
}
3 2 1 4 5 6 9 8 7
答案 0 :(得分:0)
这就是我要做的:
int[][] mat= {{1,2,3},{4,5,6},{7,8,9}};
int row=0;
while(row < mat.length) {
if(row%2 == 0){ //if an even row, go right to left
int col = mat[0].length - 1;
while(col >= 0) { System.out.print(mat[row][col]); col--; }
}else {
int col = 0;
while(col < mat[0].length) { System.out.print(mat[row][col]); col++; }
}
row++;
}
您要出错的地方是在循环内递增r,而不检查它是否仍小于打印前的长度。 您还可以将此检查添加到代码中以使其开始工作:
.
.
r=r+1;
if(r >= row)
break;
for(int j=0;j<=c;j++) {
.
.
.
答案 1 :(得分:0)
我看到第二行说:
int row=mat.length;
由于数组索引从0开始,因此应将其更改为:
int row=mat.length-1;
以避免在调用mat[row]
时出现异常。
答案 2 :(得分:0)
您不必设置太多的变量,而只需设置for循环即可,该循环首先确定我们是从行的结尾还是开头开始,然后遍历所有整数。
int[][] mat= {{1,2,3},{4,5,6},{7,8,9}};
for(int row = 0; row < mat.length; row++){
if(row%2 == 0){
for(int col = mat[row].length -1; col >= 0; col--){
System.out.print(mat[row][col] + " ");
}
}else{
for(int col = 0; col < mat[row].length; col++){
System.out.print(mat[row][col] + " ");
}
}
}
答案 3 :(得分:0)
这是一种方法。重要的是要考虑行长以允许数组参差不齐。
int[][] mat = { { 1, 2, 3
}, { 4, 5, 6
}, { 7, 8, 9, 10, 11
}, { 12, 13
}, { 14, 15, 16, 17, 18, 19
}
};
for (int r = 0; r < mat.length; r++) {
if (r % 2 == 0) {
for (int c = mat[r].length - 1; c >= 0; c--) {
System.out.print(" " + mat[r][c]);
}
}
else {
for (int c = 0; c < mat[r].length; c++) {
System.out.print(" " + mat[r][c]);
}
}
}
请注意,如果您想从左到右蜿蜒,则将其修改为使用r % 2 == 1
。如果您想自下而上,请更改外循环以从最后一行开始。
答案 4 :(得分:0)
您的代码引发ArrayIndexOutOfBounds异常,因为第二次迭代时r变为3(r = r + 1),并且您尝试访问mat [ 3 ] [2](即,您正在访问的值第四行不可用)
return this.http.get('../assets/exercises.json')
因此,所有奇数行(即第一,第三,第五行..)元素的打印顺序将相反,偶数行的元素将按照给定矩阵的格式打印