while循环在第一个错误状态时停止

时间:2013-05-08 11:30:41

标签: java

我有这个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而不是{{1}}

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

3 个答案:

答案 0 :(得分: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逻辑运算符执行短路,因此问题很可能在于其他变量,具体取决于它们在循环中的变化方式。

答案 1 :(得分:0)

你的问题是:while循环尝试解决你的情况。您的条件包含对不存在的数组索引的访问权限。所以在你的条件变为“false”之前,会抛出一个ArrayOutOfBoundsException。

解决这个问题你可以去:

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

    //do something

    positionUp--;
}

答案 2 :(得分:0)

Java确实有短路运营商(&&和|| - 见Java logical operator short-circuiting)。因此,只要positionUp为< = 0,第二部分就不会执行。

这强烈暗示ArrayOutOfBoundsException源自你的i和j变量。

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