2013-02-15 37 views
0

我的大脑显然并没有在所有气瓶上开火,但我正在开发一个程序来发现一个数字是否是素数。下面的循环工作,但我不明白为什么。如果质数(test [k])是5并且i = 3;如果3 * 3大于5,为什么循环会继续?简单循环查询

 int [] test = new int[] {15,14,2,3,19,70,7,9,11,12,13,14,21,23,0,107}; 
int test2 = 7; 


for(int k= 0; k <test.length; k++) 
{ 
    boolean IsPrime= true; 
    if(test[k]==2) 
    { 
     System.out.println(test[k] + " is a prime number"); 
     IsPrime = true; 
     continue; 
    } 

    else if (test[k] % 2 == 0) 
    { 
     IsPrime = false; 
     System.out.println(test[k] + " is NOT a prime number"); 
     continue; 
    } 

    else 
     { 
      for(int i = 3; i * i <= test[k]; i+= 2) 
      { 
       System.out.println(i); 
       if(test[k] % i == 0) 
       { 
        IsPrime =false; 
       } 
      } 
       if(IsPrime == true) 
       System.out.println(test[k] + " is a prime number"); 

       else 
       { 
        System.out.println(test[k] + " is NOT a prime number"); 
       } 
     } 
} 

}

+0

你有更多的代码可以告诉我们吗? – funerr 2013-02-15 14:32:14

+0

添加完整的代码 – Calgar99 2013-02-15 14:34:23

+0

是的。我试图通过从循环中删除偶数并检查奇数直到测试号码的平方根 – Calgar99 2013-02-15 14:45:37

回答

3

循环将无法继续,它的工作如预期。
让去尽管代码与测试[K] = 5:

1) IsPrime = true (Line: 7) 
2) if (test[k] == 2) is false 
3) else if (test[k] % 2 == 0) is false 
4) we are in the else 
4.1) i = 3 
4.2) i*i <= 5 ? false 
4.3) It does not go in the loop! 
4.4) Is Prime == true is true; 
--End-- 

那么问题出在哪里?你为什么认为它确实进入循环?

+0

更有效地进行检查。您的绝对正确。这是我的代码的布局。我认为IsPrime测试包含在循环内而不是外部。谢谢。我以为我忘记了一些侧面的规则。 – Calgar99 2013-02-15 14:52:40

+0

@DiarmuidCampion,没问题。 – funerr 2013-02-15 14:53:49