Java Connect 4 check win方法抛出索引越界错误

Java Connect 4 check win方法抛出索引越界错误,java,multidimensional-array,Java,Multidimensional Array,在测试用例中检查win时收到的错误是“java.lang.ArrayIndexOutOfBoundsException”错误。抱歉,如果以前有人问过这个问题,我已经尝试过寻找其他解决方案,但找不到任何解决方案。所以我希望这是好的。项目代码可在此处查看: public class testClass { static int[][] board1 = { {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0,

在测试用例中检查win时收到的错误是“java.lang.ArrayIndexOutOfBoundsException”错误。抱歉,如果以前有人问过这个问题,我已经尝试过寻找其他解决方案,但找不到任何解决方案。所以我希望这是好的。项目代码可在此处查看:

public class testClass {
    
    static int[][] board1 = {
            {0, 0, 0, 0, 0, 0, 0},
            {0, 0, 0, 0, 0, 0, 0},
            {0, 0, 0, 0, 0, 0, 0},
            {0, 0, 0, 0, 0, 0, 0},
            {0, 0, 0, 0, 0, 0, 0},
            {0, 0, 2, 2, 2, 2, 0},
        };
    
    static int[][] board2 = {
            {0, 0, 0, 0, 0, 0, 0},
            {0, 1, 0, 0, 0, 0, 0},
            {0, 1, 0, 0, 0, 0, 0},
            {0, 1, 0, 0, 0, 0, 0},
            {0, 1, 0, 0, 0, 0, 0},
            {0, 0, 0, 0, 0, 0, 0},
        };
    
    static int[][] board3 = {
            {0, 0, 0, 0, 0, 0, 0},
            {0, 0, 0, 0, 0, 0, 0},
            {0, 0, 0, 0, 0, 1, 0},
            {0, 0, 0, 0, 1, 0, 0},
            {0, 0, 0, 1, 0, 0, 0},
            {0, 0, 1, 0, 0, 0, 0},
        };
    
    static int redCount, ylwCount;
    
    
    public static void main(String[] args) {
        horizontalWin();
        verticalWin();
        diagonalWin();
    }
    
    public static void horizontalWin() {
        for (int i = 0; i < 4; i++) {
            if (board1[5][2 + i] == 1) {
                redCount++;
            } else if (board1[5][2 + i] == 2) {
                ylwCount++;
            }
            
            if (redCount == 4) {
                System.out.println("Red wins");
            } else if (ylwCount == 4) {
                System.out.println("Yellow wins");
            }
        }
        redCount = 0;
        ylwCount = 0;
    }
    
    public static void verticalWin() {
        for (int i = 0; i < 4; i++) {
            if (board2[1 + i][1] == 1 || board2[1 - i][1] == 1) {
                redCount++;
            } else if (board2[1 - i][1] == 2 || board2[1 - i][1] == 2) {
                ylwCount++;
            }
            
            if (redCount == 4) {
                System.out.println("Red wins");
            } else if (ylwCount == 4) {
                System.out.println("Yellow wins");
            }
        }
        redCount = 0;
        ylwCount = 0;
    }
    
    public static void diagonalWin() {
        for (int i = 0; i < 4; i++) {
            if (board3[5 + i][2 + i] == 1 || board3[5 - i][2 - i] == 1) {
                redCount++;
            } else if (board3[5 + i][2 + i] == 2 || board3[5 - i][2 - i] == 2) {
                ylwCount++;
            }
            
            if (redCount == 4) {
                System.out.println("Red wins");
            } else if (ylwCount == 4) {
                System.out.println("Yellow wins");
            }
        }
        redCount = 0;
        ylwCount = 0;
    }
}
公共类testClass{
静态int[]board1={
{0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0},
{0, 0, 2, 2, 2, 2, 0},
};
静态int[]board2={
{0, 0, 0, 0, 0, 0, 0},
{0, 1, 0, 0, 0, 0, 0},
{0, 1, 0, 0, 0, 0, 0},
{0, 1, 0, 0, 0, 0, 0},
{0, 1, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0},
};
静态int[]board3={
{0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 1, 0},
{0, 0, 0, 0, 1, 0, 0},
{0, 0, 0, 1, 0, 0, 0},
{0, 0, 1, 0, 0, 0, 0},
};
静态整数redCount,ylwCount;
公共静态void main(字符串[]args){
水平温();
verticalWin();
对角温();
}
公共静态void horizontalWin(){
对于(int i=0;i<4;i++){
if(board1[5][2+i]==1){
redCount++;
}else if(board1[5][2+i]==2){
ylwCount++;
}
如果(redCount==4){
System.out.println(“红色胜利”);
}如果(ylwCount==4),则为else{
System.out.println(“黄色胜利”);
}
}
redCount=0;
ylwCount=0;
}
公共静态void verticalWin(){
对于(int i=0;i<4;i++){
如果(board2[1+i][1]==1 | | board2[1-i][1]==1){
redCount++;
}else if(board2[1-i][1]==2 | | board2[1-i][1]==2){
ylwCount++;
}
如果(redCount==4){
System.out.println(“红色胜利”);
}如果(ylwCount==4),则为else{
System.out.println(“黄色胜利”);
}
}
redCount=0;
ylwCount=0;
}
公共静态void diagonalWin(){
对于(int i=0;i<4;i++){
如果(board3[5+i][2+i]==1 | | board3[5-i][2-i]==1){
redCount++;
}else if(board3[5+i][2+i]==2 | | board3[5-i][2-i]==2){
ylwCount++;
}
如果(redCount==4){
System.out.println(“红色胜利”);
}如果(ylwCount==4),则为else{
System.out.println(“黄色胜利”);
}
}
redCount=0;
ylwCount=0;
}
}
在方法diagonalWin()中,board3[5+i][2+i]超出了board3的尺寸(即7X6)

一旦i=1:board3[5+i][2+i]=board[6][3]

阵列中不存在板[6][3]。

在方法diagonalWin()中,板3[5+i][2+i]超出了板3的尺寸(即7X6)

一旦i=1:board3[5+i][2+i]=board[6][3]


阵列中不存在板[6][3]。

1)堆栈跟踪将告诉您导致问题的语句。2) 然后确定索引“超出范围”的原因,然后解决问题。3) 我猜当你使用“5+I”时,你会遇到问题。当i=1、2或3时会发生什么?你会得到一个6、7或8的索引,这将是“出界”的。Java索引是基于0的。因此,如果您有6行,最大索引只能是5。@camickr所以在检查行中的片段之前,我应该检查每行或每列添加4是否会导致值大于索引边界?循环条件不应允许您超出数组的边界。这就是使用for循环的目的。您可以控制开始索引和结束索引。所以问题是为什么要从索引5开始?所以你需要改变你的逻辑。我将让您自己找出合适的算法。1)堆栈跟踪将告诉您导致问题的语句。2) 然后确定索引“超出范围”的原因,然后解决问题。3) 我猜当你使用“5+I”时,你会遇到问题。当i=1、2或3时会发生什么?你会得到一个6、7或8的索引,这将是“出界”的。Java索引是基于0的。因此,如果您有6行,最大索引只能是5。@camickr所以在检查行中的片段之前,我应该检查每行或每列添加4是否会导致值大于索引边界?循环条件不应允许您超出数组的边界。这就是使用for循环的目的。您可以控制开始索引和结束索引。所以问题是为什么要从索引5开始?所以你需要改变你的逻辑。我会让你自己找出合适的算法。