我有这个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}}
我没看到如何解决这个问题。有人能指责我吗?
答案 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变量。
我会输出它们(在它们在数组中使用之前),这样你就可以看到抛出异常时它们具有的值。