我正在尝试使用我在网上找到的 ai 来实现 connect 4,并且我对其进行了一些修改。我正在尝试添加左移右移移动。 左移 - ABCDEFG -> GABCDEF 右移 - ABCDEFG -> BCDEFGA 我尝试将其添加到合法 Action 中
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,},
};
}
最佳答案
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 并尝试在“else board[x][y] = board[x][y--]”中访问它,其中一次你再次减少它。第一次迭代后,y 将为 -1。这不是有效的索引。我会再次查看这个逻辑,如果必须的话,写出每个迭代并写出什么值是什么。
自始至终,您都在双重递增/递减 y 值。
关于java - 连接四左移右移索引越界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49160368/