我正在尝试使用我在网上找到的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,},
};
}
答案 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值。