gpt4 book ai didi

java - 为什么我在这个程序中收到 "ArrayIndexOutOfBounds"错误?

转载 作者:行者123 更新时间:2023-12-01 17:01:48 25 4
gpt4 key购买 nike

我编写了一个程序,其中用户输入二维数组的维度,然后计算机打印出具有这些维度的表格,并用 0 到 9 的随机整数填充它。然后,如果有四个连续的如果整数出现在表中的任意位置,则计算机将返回“True”。如果表中没有连续的相等整数,则返回“False”。例如:

2 5 8 7 1
3 2 9 4 7
5 1 2 0 3
8 0 1 2 7

在该表中,两个连续出现,从第一个位置斜向出现。也可以是这样的:

9 5 3 7 0
2 5 7 3 1
8 5 0 2 9
4 5 1 7 5

在此表中,从第二个位置开始垂直向下显示五个。

这是程序的代码:

/*MyName*/
package fourconsecutivenumbers;
import java.util.Random;
import java.util.Scanner;
public class FourConsecutiveNumbers {

public static void main(String[] args) {

Scanner rowDimension = new Scanner(System.in);
System.out.print("Enter the number of rows: ");
int firstInput = rowDimension.nextInt();

Scanner columnDimension = new Scanner(System.in);
System.out.print("Enter the number of columns: ");
int secondInput = columnDimension.nextInt();

int[][] randomTable = new int[firstInput][secondInput];
for (int row = 0; row < firstInput; row++) {
for (int column = 0; column < secondInput; column++) {
randomTable[row][column] = (int)(Math.random() * 10 + 0);
System.out.print(randomTable[row][column] + " ");
}
System.out.println();
}
if(check_horizontal(randomTable) || check_vertical(randomTable) || check_diagonal(randomTable)){
System.out.println("True");
}
else {
System.out.println("False");
}
}


public static boolean check_vertical(int[][] randomTable) {

for (int i = 0; i<randomTable.length; i++){
for(int t=0; t<randomTable[0].length-3;t++){
if (randomTable[i][t]==randomTable[i][t+1] && randomTable[i][t+1]==randomTable[i][t+2] && randomTable[i][t+2]==randomTable[i][t+3]){
return true;
}
}
}
return false;
}
public static boolean check_horizontal(int[][] randomTable){

for (int i = 0; i<randomTable.length; i++){
for(int t=0; t<randomTable[0].length-3;t++){
if (randomTable[t][i]==randomTable[t+1][i] && randomTable[t+1][i]==randomTable[t+2][i] && randomTable[t+2][i]==randomTable[t+3][i]){
return true;
}
}

}
return false;
}
public static boolean check_diagonal(int[][] randomTable){
//check down
for (int t =0; t<randomTable.length-3; t++){
for(int i=0; i<randomTable[0].length-3;i++){
if (randomTable[i][t]==randomTable[i+1][t+1] && randomTable[i+1][t+1]==randomTable[i+2][t+2] && randomTable[i+2][t+2]==randomTable[i+3][t+3]){
return true;
}

}
}
//check up
for (int t =0; t<randomTable.length-3; t--){
for(int i=0; i<randomTable[0].length-3;i++){
if (randomTable[t][i]==randomTable[t-1][i+1] && randomTable[t-1][i+1]==randomTable[t-2][i+2] && randomTable[t-2][i+2]==randomTable[t-3][i+3]){
return true;
}

}
}
return false;
}
}

现在我得到的错误是:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
at fourconsecutivenumbers.FourConsecutiveNumbers.check_diagonal(FourConsecutiveNumbers.java:70)
at fourconsecutivenumbers.FourConsecutiveNumbers.main(FourConsecutiveNumbers.java:25)
Java Result: 1

我知道它说错误在第 70 行,然后在第 25 行,但我不知道我做错了什么。我对编程相当陌生,所以我希望更有经验的程序能够看到我做错了什么。非常感谢您的帮助!

最佳答案

这就是问题:

randomTable[t-1][i+1]

t为0时,将访问randomTable[-1][i + 1] - 这永远不会有效。同样,您稍后会继续t - 3

此外,您的循环从 0 开始,然后向后...因此,即使第一次迭代完成,第二次迭代也会得到 t=-1。 p>

您可能希望循环声明为:

for (int t = randomTable.length; t >= 3; t--)

或者只是:

for (int t = 3; t < randomTable.length; t++)

取决于您是否确实需要减少t

此外,我建议您遵循 Java 命名约定 - checkHorizo​​ntal 而不是 check_horizo​​ntal 等。

关于java - 为什么我在这个程序中收到 "ArrayIndexOutOfBounds"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27217917/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com