我从这段代码中得到一个IndexOutOfBounds错误:
Log.w("aa", "line size: " + line.getSize());
for ( a = line.getSize() - 1; a >= 0; a--);
test(a, line);
}
public void test(int a, LineCreator line){
Log.w("AA", "a equals: " + a);
int test = line.getSquare(a);
}
06-17 21:31:42.169 421-442 / com.Nuotta W / aa:行数:3
06-17 21:31:42.169 421-442 / com.Nuotta W / AA:等于:-1
它获得的线条大小为3.但它给出-1。
LineCreator是我的一个对象。它有非常简单的方法getSize只返回Array.length和getSquare(x)返回ArrayList.get(x)它们可以在其他地方工作但不在这里。
答案 0 :(得分:2)
for ( a = line.getSize() - 1; a >= 0; a--);
test(a, line);
}
你的for循环结束时有一个分号。
for循环循环但从不执行test
会发生什么。因此,a
通过迭代设置为-1,然后调用test
。
在for循环结束时删除分号,它将起作用。
答案 1 :(得分:1)
;
语句后面有分号for
,表示for
的正文 为空。因此,此循环将迭代,直到条件为false
。当条件为假时,a
将为-1
。然后,在for
循环之外,您使用以下参数调用test
方法:
test(-1, line);
将导致IndexOutOfBounds
例外。
请注意,您可以访问a
之外的for
,因为您已将声明在循环之外,即使在循环结束后也可以访问它。
为了更好地可视化,您的代码相当于:
for ( a = line.getSize() - 1; a >= 0; a--) {
// empty
}
test(a, line); // here 'a' will be -1