Java循环不迭代
我从这段代码中得到一个IndexOutOfBounds错误:Java循环不迭代,java,android,loops,for-loop,Java,Android,Loops,For Loop,我从这段代码中得到一个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.getSqua
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﹕ a等于:-1
它得到的行大小是3。但它给出了一个-1
LineCreator是我的一个对象。它有非常简单的方法getSize,只返回Array.length和getSquarex,返回ArrayList.getx,它们在其他地方工作,但在这里不工作
for ( a = line.getSize() - 1; a >= 0; a--);
test(a, line);
}
在for循环的末尾有一个分号
发生的情况是for循环循环,但从不执行测试。因此,通过迭代将a设置为-1,然后调用test
去掉for循环末尾的分号,它就会工作。你有一个分号;在for语句之后,这意味着for的主体为空。因此,这个循环将迭代,直到条件为false为止。当条件为false时,a将为-1。然后,在for循环之外,您使用以下参数调用测试方法:
test(-1, line);
这将导致IndexOutOfBounds异常
请注意,您可以访问for外部的,因为您已经在循环外部声明了它,这样即使在循环完成后也可以访问它
为了更好地可视化,您的代码相当于:
for ( a = line.getSize() - 1; a >= 0; a--) {
// empty
}
test(a, line); // here 'a' will be -1
删除该文件;在for循环的末尾;它目前是for循环的主体。您可能也错过了开头{对于第一个循环。我真希望这是一个编译警告/错误,并强制将正文放在括号内或其他地方。这里的意外键入错误可能会导致严重的心痛。@Molehole它确实会显示一个警告,因为它不是一个错误。此外,如果答案对您有帮助,那么您可以将其标记为已接受,以帮助未来的访问者避免错误o站点。@Molehole如果您可以将IDE设置为自动在循环体周围添加大括号,这种情况会以惊人的速度被捕获,因为您最终会在a;周围添加大括号,而且很难漏掉。如果您能够做到这一点并启用空语句警告,则几乎不可能漏掉。