Java For循环,为什么J<一世?

时间:2016-07-07 11:29:32

标签: java for-loop

有人可以向我解释为什么j < i在循环中。

for(int i=1; i < 100; i++){
    boolean isPrime = true;

    //check to see if the number is prime
    for(int j=2; j < i ; j++){
        if(i % j == 0){
            isPrime = false;
        }
    }

    // print the number
    if(isPrime)
        System.out.print(i + " ");
}

由于i进入第二个循环不是i==1

3 个答案:

答案 0 :(得分:2)

您正在寻找1至100之间的素数。 对于每个数字,i(从1到100),您要检查是否有较小的数字(j)除以它。 较小的数字意味着j <岛

至于循环的第一次迭代,i = 1,所以内循环不会被执行,那就好了,因为1是素数 - 你不需要检查它是否是&#39;除以较小的数字。

答案 1 :(得分:0)

优化,因为如果i % j == i&lt; =&gt; == 0,永不A <: B

答案 2 :(得分:0)

  

当我进入第二个循环时,不是= = 1?

答案是否定的。

for-loop的条件基本上是一个布尔值。你有嵌套的for循环

for(int j=2; j < i ; j++)

这意味着要执行此for循环,j必须<&lt;岛

如果你在这一行上设置一个断点并在调试器中逐步执行它,这对你来说就会变得更加明显。

所以我想说的是,当i==1时,第二个for循环不可能执行,因为j<ifalse

所以,从代码的最开始,你有

for(int i=1; i < 100; i++){
    boolean isPrime = true;

    //check to see if the number is prime
    for(int j=2; j < i ; j++){
        if(i % j == 0){
            isPrime = false;
        }
    }

    // print the number
    if(isPrime)
        System.out.print(i + " ");
}

从一开始就运行i=1isPrime将设置为true,然后它将检查您的第二个for循环的参数是否得到满足。

for(int j=2; j < i ; j++)

j < ifalse,因此for循环不会执行。代码将跳过它并转到if语句if(isPrime)

下一次迭代,您将i=2,第二个for循环将被检查,并且看到j<i保持2 < 2的值为false,循环将是再次跳过。

您将获得i=3的第三次迭代。将检查内部循环的j<i,这次保持2 < 3的值TRUE,这样循环将最终执行。

希望这是有道理的。就像我之前提到的那样,如果您仍然不清楚,请通过调试器运行它,它应该变得清晰。