Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在二维数组中查找峰值时IndexOutofBounds异常_Java_Multidimensional Array_Data Structures_Indexoutofboundsexception - Fatal编程技术网

Java 在二维数组中查找峰值时IndexOutofBounds异常

Java 在二维数组中查找峰值时IndexOutofBounds异常,java,multidimensional-array,data-structures,indexoutofboundsexception,Java,Multidimensional Array,Data Structures,Indexoutofboundsexception,我已经清楚地定义了所有的限制,但我总是得到索引越界的例外。谁能看一下,告诉我哪里可能是错的。我试图在二维阵列中找到多个峰值。谢谢 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

我已经清楚地定义了所有的限制,但我总是得到索引越界的例外。谁能看一下,告诉我哪里可能是错的。我试图在二维阵列中找到多个峰值。谢谢

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");
            }
        }
Scanner o=新的扫描仪(System.in);
System.out.println(“输入数组长度:”);
int row=o.nextInt();
System.out.println(“已生成“+行+”x“+行+”的2d数组”);
int[][]表=新的int[行][行];
对于(int i=0;itable[a+1][b]&&table[a][b]>table[a][b+1]){
System.out.println(表[a][b]+“是峰值”);
}
如果(a==0&&表[a][b]>表[a][b-1]&&表[a][b]>表[a+1][b]&&表[a][b]>表[a][b+1]){
System.out.println(表[a][b]+“是峰值”);
}
如果(b==0&&表[a][b]>表[a-1][b]&&表[a][b]>表[a+1][b]&&表[a][b]>表[a][b+1]){
System.out.println(表[a][b]+“是峰值”);
}
如果(表[a][b]>表[a][b-1]&表[a][b]>表[a-1][b]&表[a][b]>表[a][b+1]&表[a][b]>表[a+1][b]){
System.out.println(表[a][b]+“是峰值”);
}
如果(a==n&&b==n&&table[a][b]>table[a-1][b]&&table[a][b]>table[a][b-1]){
System.out.println(表[a][b]+“是峰值”);
}
如果(a==n&&表[a][b]>表[a][b+1]&&表[a][b]>表[a-1][b]&&表[a][b]>表[a][b-1]){
System.out.println(表[a][b]+“是峰值”);
}
如果(b==n&表[a][b]>表[a+1][b]&表[a][b]>表[a-1][b]&表[a][b]>表[a][b-1]){
System.out.println(表[a][b]+“是峰值”);
}
}

<代码>如果“< /代码> s应该是<代码>否则如果是<代码> a= b=0 <代码>:第一个<代码>如果被执行,第二个被跳过,但是第三个被再次执行,并给出一个错误,因为<代码> A-1 < /代码>不是一个有效行。对给定的元素执行多次

如果您的目标是查找严格大于其(最多)四个相邻元素的元素,我可以建议使用非常大的值填充矩阵吗?这将消除所有检查并大大缩短代码。例如:

int[]table=newint[row+2][row+2];
对于(int i=0;i
它看起来像是第三个到第七个
if
s应该是
else if
s。考虑案例<代码> A= B=0 :第一个<代码>如果被执行,第二个被跳过,但是第三个被再次执行,并给出一个错误,因为<代码> A-1 < /代码>不是有效行。作为旁注,这还可以为给定的元素打印几次消息

如果您的目标是查找严格大于其(最多)四个相邻元素的元素,我可以建议使用非常大的值填充矩阵吗?这将消除所有检查并大大缩短代码。比如:

int[]table=newint[row+2][row+2];
对于(int i=0;i
在上一次迭代中,a+1将超出范围。上一次迭代中的示例行=4 a将是3,因此3+1是4,这超出了范围,因为数组从0开始。同样适用于b@bakero98但我已经为最后一行迭代定义了n。如果a或b==n,那么在最后一次迭代中提供的其他指令a+1将超出范围。上一次迭代中的示例行=4 a将是3,因此3+1是4,这超出了范围,因为数组从0开始。同样适用于b@bakero98但我已经为最后一行迭代定义了n。如果a或b==n,则提供其他指令