今天遇到的一个求素数的方法,有一段一直看不明白:
class PrimeNumber{
int count = 0;
int number = 2;
public void isPrime(){
while(count<50){
boolean isPrime = true;
for(int divisor = 2; divisor <= number/2; divisor++){
if(number % divisor == 0){
isPrime = false;
break;
}
}
if(isPrime){
count++;
System.out.print(number + ",");
}
number++;
}
}
其中for loop的那一段,既然当number % divisor == 0的时候就是false,即退出了for loop,那么一开始number=2的时候number % divisor == 0也是成立的,那么isPrime也就为false了,但为啥最后输出结果里面还有2呢?
本人刚出道的菜鸟,还望有人指点迷津,谢过了~~
------解决方案--------------------------------------------------------
因为number=2的时候,for处diviisor<=number/2条件不成立,没有走进for循环,直接输出了2。
------解决方案--------------------------------------------------------
number=2的时候没有进for循环,isPrime还是true
------解决方案--------------------------------------------------------
看了上面的解释,LZ明白了吗?看看代码: for(int divisor = 2; divisor <= number/2; divisor++){
当number=2时,对于上述条件divisor<=number/2即是2<=1,很明显这是不成立的,所以之后就没有进入循环啊,所以现在isPrime还是为true,所以2也被输出来了。
------解决方案--------------------------------------------------------
number = 2时,divisor <= number/2 =1,
而for()循环是for(int divisor = 2; divisor <= number/2; divisor++)
divisor=2开始,因此当number=2时,不经for()循环,直接输出。
------解决方案--------------------------------------------------------
number=2的时候没进for循环