我目前正在使用Java中的多维数组制作井字游戏,而我似乎在这里遇到了麻烦。我正在比较三个指数,以找出它们是否相同(宣布获胜者)。我发现我可以成功比较两个对象而不会抛出异常。但是,如果我比较三个,则显示用户赢了(水平)后,将引发超出范围的异常。我真的不确定发生了什么。该数组是5 x 5,类型为String,所有值最初都设置为“”。我对这个网站相当不识字,所以对不起,如果问题的格式不正确!请让我知道,以便我可以改善! :) 代码:
for (int row = 0; row < testArray.length; row++)
{
for (int column = 0; column < testArray[row].length; column++)
{
if ((testArray[row][column].equals("x")) && (testArray[row][column + 2].equals("x")) && (testArray[row][column + 4].equals("x")))
System.out.println("You win!");
if (!(column % 2 == 0))
testArray[row][column] = "|";
else if (!(row % 2 == 0))
testArray[row][column] = "-";
System.out.print(testArray[row][column]);
}
System.out.println("");
}
非常感谢您!
编辑:作为参考,我输入row = 0,column =0。然后r = 0 col = 0设置为x。 发生迭代,r = 0,col = 2设置为x,然后再次询问。当我到达r = 0时,col = 4就是发生异常的时候。
答案 0 :(得分:0)
在此行中,您不能使用:
((testArray[row][column].equals("x"))
&&(testArray[row][column + 2].equals("x"))
&& (testArray[row][column + 4].equals("x"))
对于大于3的列,它将抛出IndexOutOfBoundException
。因此,您应该将2
和4
作为变量,并根据for循环进行调整。
答案 1 :(得分:0)
您的错误在此行中:
if ((testArray[row][column].equals("x")) && (testArray[row][column + 2].equals("x")) && (testArray[row][column + 4].equals("x")))
此行导致越界异常的原因是因为对应于testArray[row][column + 2]
的数组可能不存在。
考虑在列上进行迭代的for循环达到
的情况 column = testArray[row][length-1]
这意味着列+ 2 =(长度-1)+ 2 =长度+ 1。
发生完全相同的错误
testArray[row][column + 4]
希望这可以清除一切。