Java:具有复合条件的for循环的不可思议行为

时间:2014-05-23 12:02:13

标签: java for-loop

我在java中开发了一个主要的分解代码。为此,我在某一点上有一个类似于此的代码:

for(int i = 2; i <= 40 && isPrime(i); ++i){
    System.out.println(i + " is less or equal to 40 and prime.");
}

但是,此代码具有相当不可思议的行为,因为它只测试i=2i=3isPrime()方法没有任何问题。要使图更加厚,以下代码可以正常工作:

for(int i = 4; i <= 40; ++i){
    if(isPrime(i))
        System.out.println(i + " is less or equal to 40 and prime.");
}

这可能是一个非常愚蠢的问题,但我做错了什么?

3 个答案:

答案 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循环的工作方式为:

  • 变量分配(VA)
  • 继续运行的条件(Cdnl)
  • 增量(公司)

要解决代码中的问题,您需要先了解问题所在。对于新的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;意味着继续执行代码而被愚弄。简单的新秀错误。

希望这可以解决它。

贾罗德。