我正在制作一个连续四个游戏,其中行和colomns的数量由玩家决定(所以可以是任何东西,只要超过四个)。因此用户输入存储在变量" rows"和"列"。该字段看起来像这样,所以第一行总是数字。
我对获胜者的搜索算法有困难。 虽然我的水平搜索算法工作得很好,但是具有相同逻辑的垂直算法给了我出界的错误。如果你能帮我发现错误,我将非常感激。谢谢! 1 2 3 4 5 | - | - | - | - | | - | - | - | - | | - | - | - | - |
public static String checkWinner(String [][]field){
//horizontally, which works
for(int i=1; i<=rows; i++){
for (int j=0; j<=column-1;j++){
if (((j>=3 || j==column-1) && field[i][j]!="|_" && field[i][j]==field[i][j-1] && field[i][j]==field[i][j-2] && field[i][j]==field[i][j-3])
|| (field[i][j]!="|_" && field[i][j]==field[i][j+1] && field[i][j]==field[i][j+2] && field[i][j]==field[i][j+3]))
{
return field[i][j];
}
}
}
//vertically which doesn't work
for(int i=0; i<column; i++){
for (int j=1; j<=rows-1;j++){
if (((j>=4 || j==rows-1) && field[j][i]!="|_" && field[j][i]==field[j-1][i] && field[j][i]==field[j-2][i] && field[j][i]==field[j-3][i])
|| (field[j][i]!="|_" && field[j][i]==field[j+1][i] && field[j][i]==field[j+2][i] && field[j][i]==field[j+3][i]))
{
return field[i][j];
}
}
}
return null;
}
答案 0 :(得分:1)
在您的水平循环逻辑中,您正在为j=0 to column-1
的列运行循环,但随后您正在使用field[i][j]
之类的值访问j+1, j+2, j+3
,这将超出{{1} }}
例如:用户输入column
值为column
,但5
的逻辑为j+2
&amp; j=4
会访问第6列(i=0
),这显然是 OutOfBound 。
检查field[0][6]
值
以及注意:使用equals()比较字符串而不使用rows