今天遇到的一个求素数的方法,有一段一直看不明白:
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呢?
本人刚出道的菜鸟,还望有人指点迷津,谢过了~~

解决方案 »

  1.   

    因为number=2的时候,for处diviisor<=number/2条件不成立,没有走进for循环,直接输出了2。
      

  2.   

    number=2的时候没有进for循环,isPrime还是true
      

  3.   

    看了上面的解释,LZ明白了吗?看看代码: for(int divisor = 2; divisor <= number/2; divisor++){
    当number=2时,对于上述条件divisor<=number/2即是2<=1,很明显这是不成立的,所以之后就没有进入循环啊,所以现在isPrime还是为true,所以2也被输出来了。
      

  4.   

    count = 0时,isPrime =true 
      

  5.   

    number = 2时,divisor <= number/2 =1,
    而for()循环是for(int divisor = 2; divisor <= number/2; divisor++)
    divisor=2开始,因此当number=2时,不经for()循环,直接输出。