连接四个左移左移右索引越界

时间:2018-03-07 20:06:21

标签: java arrays

我正在尝试使用我在网上找到的ai实现连接4,我给它一点点扭曲。我正在尝试添加左移右移。 左移 - ABCDEFG - > GABCDEF 右移 - ABCDEFG - > BCDEFGA 我已经尝试将此添加到法律行动

public boolean placeMove(int column, int player){         
    //if(!isLegalMove(column)) {System.out.println("Illegal move!"); return false;}
    if (column == 8){
        for (int x = 0; x < 6; x++) {
            for (int y = 0; y < 7; y--) {
                if(y == 0){
                    board[x][0] = board[x][6];
                }
                else board[x][y] = board[x][y--];
            }
        }
    }
    else if (column == 9){
        for (int x = 0; x < 6; x++) {
            for (int y = 0; y < 7; y++) {
                if(y == 5){
                    board[x][5] = board[x][0];
                }
                else board[x][y] = board[x][y++];
            }
        }
    }
    else {
        for(int i=5;i>=0;--i){
            if(board[i][column] == 0) {
                board[i][column] = (byte)player;
                return true;
            }
        }
    }
    return false;
}

然而,它返回了一个arrayindexoutofbounds异常。有人能指出我在哪里出错吗?感谢

这是董事会声明,如果有帮助

byte[][] board = new byte[6][7];

public Board1(){
    board = new byte[][]{
        {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,0,0,0,0,0,},    
    };
} 

1 个答案:

答案 0 :(得分:1)

    for (int x = 0; x < 6; x++) {
        for (int y = 0; y < 7; y--) {
            if(y == 0){
                board[x][0] = board[x][6];
            }
            else board[x][y] = board[x][y--];
        }
    }

在第二个for循环中,你有y = 0,然后你递减y并试图在&#39;否则棋盘[x] [y] =棋盘[x] [y-- ]&#39;,你再次减少它。在第一次迭代之后,y将为-1。哪个不是有效的索引。我将再次查看这个逻辑,如果必须,请写出每个迭代并写出什么值是什么。

在整个过程中,您将双倍递增/递减y值。