对于这段代码:
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
变为{ {1}}并且循环不会继续。
所以当循环返回
时false
它不会增加for (i = 2; i < number && isPrime; i++)
,因为条件不再有效(i
)。发生了什么事?
答案 0 :(得分:7)
我认为你理解循环的概念是错误的。具有结构的for
循环:
for(init; cond; inc) {
body
}
的工作原理如下:
init
; true
,则转到3,否则为结束循环。body
inc
(无论条件是否成立); 根据指定,增量(对于您的示例i++
将始终在执行body
后调用,无论条件是否成立因此,您可以将上述for
循环重写为:
for(init; cond;) {
body;
inc
}
(所以在for
标题处有一个空的增量)。在这里,编译器无法消除body
和inc
之间的歧义。 for
循环的语法结构使得程序员不会忘记执行增量,这是while
循环中经常出现的典型错误。
答案 1 :(得分:3)
如果您要循环停在i < number
,则必须先i++
。
循环系统并不知道您将在isPrime
上停下来并且&#34;知道&#34;不打扰增加。
你应该做的是放弃旗帜,因为它会更简单。
int number = 25;
for (int i = 2; i < number; i++) {
if (number % i == 0) {
System.out.println("i is " + i + " " + number + " is not prime");
break;
}
}
答案 2 :(得分:1)
我从来没有见过像这样编写for循环的人。请尝试使用break
关键字代替:
int number = 25;
boolean isPrime = true;
for (int i = 2; i < number; i++) {
if (number % i == 0) {
isPrime = false;
break;
}
}
System.out.println("i is " + i + " isPrime is " + isPrime);