Java 为什么我会得到一个;ArrayIndexOutOfBounds“;这个程序有错误吗?

Java 为什么我会得到一个;ArrayIndexOutOfBounds“;这个程序有错误吗?,java,arrays,exception,nullpointerexception,indexoutofboundsexception,Java,Arrays,Exception,Nullpointerexception,Indexoutofboundsexception,我编写了一个程序,用户输入二维数组的维数,然后计算机打印出带有这些维数的表格,并用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 在此表中,从第二个点垂直向下显

我编写了一个程序,用户输入二维数组的维数,然后计算机打印出带有这些维数的表格,并用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;
}
}
我知道它说错误在第70行,然后在第25行,但我不知道我做错了什么。我对编程相当陌生,所以我希望一个更有经验的程序能看到我做错了什么。非常感谢您的帮助

这就是问题所在:

randomTable[t-1][i+1]
t
为0时,将访问
随机表[-1][i+1]
——该表永远无效。同样,您稍后将转到
t-3

此外,您的循环从0开始,但随后将返回。。。因此,即使第一次迭代完成,第二次迭代的结果也是t=-1

您可能希望循环声明为:

for (int t = randomTable.length; t >= 3; t--)
或者只是:

for (int t = 3; t < randomTable.length; t++)
for(int t=3;t
取决于您是否真的需要
t
减少

此外,我建议您遵循Java命名约定——
checkHorizontal
而不是
check\u horizontal
等。这就是问题所在:

randomTable[t-1][i+1]
t
为0时,将访问
随机表[-1][i+1]
——该表永远无效。同样,您稍后将转到
t-3

此外,您的循环从0开始,但随后将返回。。。因此,即使第一次迭代完成,第二次迭代的结果也是t=-1

您可能希望循环声明为:

for (int t = randomTable.length; t >= 3; t--)
或者只是:

for (int t = 3; t < randomTable.length; t++)
for(int t=3;t
取决于您是否真的需要
t
减少


此外,我建议您遵循Java命名约定-
checkHorizontal
而不是
check\u horizontal
等。

因为您检查的是randomTable[0]。length而不是randomTable[I]。length in check_diagonal@LorenzoBoccaccia不正确,随机表[0]。长度是第二个维度的大小。这是正确的。因为您检查了randomTable[0]。长度而不是randomTable[i]。检查中的长度_diagonal@LorenzoBoccaccia不正确,随机表[0]。长度是第二个维度的大小。这是正确的。谢谢你,乔恩,我会修好它,看看我能得到什么。谢谢你,乔恩,我会修好它,看看我能得到什么。