java如何在以snake形式打印数组时处理ArrayIndexOutofBounds
我需要以蛇的形式打印矩阵。因此,对于该矩阵,输出应为:
我的问题是这段代码会抛出ArrayIndexOutof边界。我该如何处理才能避免这种情况
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
# 1 楼答案
我会这样做:
错误的地方是在循环中增加r,而不是检查它是否仍然小于打印前的长度。 您还可以将此检查添加到代码中,以使其开始工作:
# 2 楼答案
您的代码引发ArrayIndexOutOfBounds异常,因为在第二次迭代时r变为3(r=r+1),并且您尝试访问mat[3][2](即,您正在访问第四行中不可用的值)
因此,你所有的奇数行(即第1、第3、第5行……)元素将按相反的顺序打印,甚至行的元素也将按给定的矩阵打印
# 3 楼答案
这里有一个方法。采用行长度以允许不规则数组非常重要
注意,如果您想从左向右蛇行,那么将其修改为使用
r % 2 == 1
。如果要从下往上,请将外部循环更改为从最后一行开始# 4 楼答案
我看到第二行写着:
由于数组索引从0开始,因此应将其更改为:
避免在调用
mat[row]
时出现异常# 5 楼答案
不用初始化这么多变量,只需设置for循环,它首先确定我们是从行的末尾还是开头开始,然后迭代所有整数