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