对于这段代码:
int number = 25;
int i;
boolean isPrime = true;
for (i = 2; i < number && isPrime; i++) {
if (number % i == 0) {
isPrime = false;
}
}
System.out.println("i is " + i + " isPrime is " + isPrime);
Run Code Online (Sandbox Code Playgroud)
我的印象是,输出会是下:"i is 5 isPrime is false",从何时起i=5,number % i == 0是true,这样的变量isPrime成为false循环将无法继续.
所以当循环返回时
for (i = 2; i < number && isPrime; i++)
Run Code Online (Sandbox Code Playgroud)
它不会增加i,因为条件不再有效(i < number && isPrime).这是怎么回事?
我认为你以错误的方式理解循环的概念.一个for结构循环:
for(init; cond; inc) {
body
}
Run Code Online (Sandbox Code Playgroud)
工作原理如下:
init执行;true,则转到3,否则,结束循环.body执行inc被执行(条件无论是否成立);正如指定的那样,增量(对于您的示例,i++将始终在执行之后调用body,无论条件是否成立.因此,您可以将上述for循环重写为:
for(init; cond;) {
body;
inc
}
Run Code Online (Sandbox Code Playgroud)
(所以在for标题处有一个空的增量).在这里,编译器无法消除body和之间的歧义inc.for循环的语法以这样的方式构造,使得程序员不会忘记执行增量,这是通常在while循环中发生的典型错误.