【发布时间】:2020-07-17 10:23:23
【问题描述】:
我已经清楚地定义了所有限制,但我一直在获取索引超出范围的异常。任何人都可以看看并告诉我我可能错在哪里。我试图在二维数组中找到多个峰值。谢谢。
Scanner o = new Scanner(System.in);
System.out.println("Enter length of array: ");
int row = o.nextInt();
System.out.println("A 2d array of " + row + "x" + row + " has been generated");
int[][] table = new int[row][row];
for (int i = 0; i < row; i++){
for (int j = 0; j < row; j++){
table[i][j] = (int)(Math.random() * 100);
}
}
for (int i = 0; i < row; i++){
for (int j = 0; j < row; j++){
System.out.print(table[i][j] + "\t");
}
System.out.println("");
}
int n = row - 1;
for (int a = 0; a < row; a++){
for (int b = 0; b < row; b++){
if (a == 0 && b == 0 && table[a][b] > table[a+1][b] && table[a][b] > table[a][b+1]){
System.out.println(table[a][b] + " is a peak");
}
else if (a == 0 && table[a][b] > table[a][b-1] && table[a][b] > table[a+1][b] && table[a][b] > table[a][b+1]){
System.out.println(table[a][b] + " is a peak");
}
if (b == 0 && table[a][b] > table[a-1][b] && table[a][b] > table[a+1][b] && table[a][b] > table[a][b+1]){
System.out.println(table[a][b] + " is a peak");
}
if (table[a][b] > table[a][b-1] && table[a][b] > table[a-1][b] && table[a][b] > table[a][b+1] && table[a][b] > table[a+1][b]){
System.out.println(table[a][b] + " is a peak");
}
if (a == n && b == n && table[a][b] > table[a-1][b] && table[a][b] > table[a][b-1]){
System.out.println(table[a][b] + " is a peak");
}
if (a == n && table[a][b] > table[a][b+1] && table[a][b] > table[a-1][b] && table[a][b] > table[a][b-1]){
System.out.println(table[a][b] + " is a peak");
}
if (b == n && table[a][b] > table[a+1][b] && table[a][b] > table[a-1][b] && table[a][b] > table[a][b-1]){
System.out.println(table[a][b] + " is a peak");
}
}
【问题讨论】:
-
在最后一次迭代中,a+1 将超出范围。上一次迭代中的示例 row=4 a 将为 3,因此 3+1 为 4,这是超出范围的,因为数组从 0 开始。b 也是如此
-
@bakero98 但我已经为最后一行迭代定义了 n 。如果 a 或 b == n 则提供其他说明
标签: java multidimensional-array data-structures indexoutofboundsexception