我在java中开发了一个主要的分解代码。为此,我在某一点上有一个类似于此的代码:
for(int i = 2; i <= 40 && isPrime(i); ++i){
System.out.println(i + " is less or equal to 40 and prime.");
}
但是,此代码具有相当不可思议的行为,因为它只测试i=2
和i=3
。 isPrime()
方法没有任何问题。要使图更加厚,以下代码可以正常工作:
for(int i = 4; i <= 40; ++i){
if(isPrime(i))
System.out.println(i + " is less or equal to 40 and prime.");
}
这可能是一个非常愚蠢的问题,但我做错了什么?
答案 0 :(得分:3)
在for循环中,条件决定是继续还是终止循环。
因此,一旦(i<= 40 && isPrime(i))
在程序执行中第一次评估为 false ,循环就不再运行了。这发生在第一个复合材料4上。因此,只有2和3被写入屏幕。
答案 1 :(得分:3)
for
循环中的第二个表达式&#34;如果此计算结果为false&#34;则停止循环。使用while
循环,
for(A;B;C) {
D;
}
循环可以重写为
A;
while (B) {
D;
C;
}
因此,只要您处理复合数字,循环就会终止。在你的情况下,这是4。
答案 2 :(得分:1)
For循环在Java的重复部分非常有趣。 for循环的工作方式为:
要解决代码中的问题,您需要先了解问题所在。对于新的Java初学者来说,人们可能会认为如果Cdnl(条件)为假,那么它将继续下一个数字。错了,如果Cdnl为假,则循环将会中断。 for循环可以看作是一个更快的while循环:
int i = 0;
while(i <= 10) {
System.out.println(i);
i++;
}
//This is equal to:
for(int i = 0; i <= 10; i++) {
System.out.println(i);
}
足够堵塞,让我们修复代码。问题在于您的条件。轻松修复:
for(int i = 2; i <= 40; i++) {
if(!isPrime(i)) continue;
System.out.println(i + " is less or equal to 40 and prime.");
}
if(!isPrime(i)) continue;
只是意味着如果 i 是 NOT prime,那么它将跳到循环的末尾,从而递增并尝试下一个数字。不要因为continue;
意味着继续执行代码而被愚弄。简单的新秀错误。
希望这可以解决它。
贾罗德。