1

我有这个while循环:

//All of this code is inside a for loop
positionUp = i - 1;

while ((positionUp > 0) && boardMatrix[positionUp][j] == boardMatrix[i][j]) {

    //do something

    positionUp--;
}

在某些时候,它可能positionUp被分配了值-1(当i=0

我认为while循环将在第一次评估时停止,false因此不评估boardMatrix[positionUp][j]也不得到java.lang.ArrayIndexOutOfBoundsException: -1

我没有看到我该如何解决这个问题。有人能指点我吗?

4

3 回答 3

8

将您的循环(暂时)更改为:

System.out.println ("pos="+positionUp+",i="+i+",j="+j);
while ((positionUp > 0) && boardMatrix[positionUp][j] == boardMatrix[i][j]) {
    positionUp--;
    System.out.println ("pos="+positionUp+",i="+i+",j="+j);
}

查看哪个变量导致了问题。Java 逻辑运算符短路,因此问题很可能出在其他变量上,具体取决于它们在循环中的变化方式。

于 2013-05-08T11:35:10.710 回答
0

你的问题是:while循环试图解决你的情况。您的条件包含对不存在的数组索引的访问。因此,在您的条件变为“假”之前,会引发 ArrayOutOfBoundsException。

要解决这个问题,你可以去:

while ((positionUp > 0) && 
       null != boardMatrix &&
       null != boardMatrix[positionUp][j] && 
       null != boardMatrix[i][j] && 
       boardMatrix[positionUp][j] == boardMatrix[i][j]) {

    //do something

    positionUp--;
}
于 2013-05-08T11:36:01.797 回答
0

Java 确实有短路运算符(&& 和 || - 请参阅Java 逻辑运算符短路)。所以只要 positionUp <= 0,第二部分就不会执行。

这强烈表明 ArrayOutOfBoundsException 源自您的 i 和 j 变量。

我会输出它们(在数组中使用它们之前),这样您就可以在抛出异常时查看它们的值。

于 2013-05-08T11:38:09.680 回答