有人可以向我解释为什么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
?
答案 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<i
是false
。
所以,从代码的最开始,你有
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=1
。 isPrime
将设置为true
,然后它将检查您的第二个for循环的参数是否得到满足。
for(int j=2; j < i ; j++)
j < i
为false
,因此for循环不会执行。代码将跳过它并转到if语句if(isPrime)
下一次迭代,您将i=2
,第二个for循环将被检查,并且看到j<i
保持2 < 2
的值为false
,循环将是再次跳过。
您将获得i=3
的第三次迭代。将检查内部循环的j<i
,这次保持2 < 3
的值TRUE
,这样循环将最终执行。
希望这是有道理的。就像我之前提到的那样,如果您仍然不清楚,请通过调试器运行它,它应该变得清晰。