问题描述
Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: -1 数组越界异常
int[][] yanghui = new int[10][];
for (int i = 0;i < yanghui.length ;i++ ) {
yanghui[i] = new int[i + 1];
for (int j = 0;j < yanghui[i].length ;j++ ) {
if (j == 0 || j == yanghui[i].length - 1) {
yanghui[i][j] = 1;
}
yanghui[i][j] = yanghui[i - 1][j] + yanghui[i - 1][j - 1];
}
}
运行结果:
原因分析:
if语句并不等于if-else语句,if语句执行完后会继续执行yanghui[i][j] = yanghui[i - 1][j] + yanghui[i - 1][j - 1];但此时i=0,yanghui[0-1],所以会出现异常
int[][] yanghui = new int[10][];
for (int i = 0;i < yanghui.length ;i++ ) {
yanghui[i] = new int[i + 1];
for (int j = 0;j < yanghui[i].length ;j++ ) {
if (j == 0 || j == yanghui[i].length - 1) {
yanghui[i][j] = 1;
}
yanghui[i][j] = yanghui[i - 1][j] + yanghui[i - 1][j - 1];
}
}
解决方案:
if后面添加else,以确保只有不在边界位置的元素才进行计算。
int[][] yanghui = new int[10][];
for (int i = 0;i < yanghui.length ;i++ ) {
yanghui[i] = new int[i + 1];
for (int j = 0;j < yanghui[i].length ;j++ ) {
if (j == 0 || j == yanghui[i].length - 1) {
yanghui[i][j] = 1;
} else {
yanghui[i][j] = yanghui[i - 1][j] + yanghui[i - 1][j - 1];
}
}
}
运行结果: