比较Java多维数组中的三个索引会导致越界异常

时间:2018-11-02 22:20:19

标签: java multidimensional-array indexoutofboundsexception

我目前正在使用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就是发生异常的时候。

2 个答案:

答案 0 :(得分:0)

在此行中,您不能使用:

((testArray[row][column].equals("x"))  
   &&(testArray[row][column + 2].equals("x")) 
   && (testArray[row][column + 4].equals("x"))

对于大于3的列,它将抛出IndexOutOfBoundException。因此,您应该将24作为变量,并根据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]

希望这可以清除一切。