2015-07-11 48 views
0

我在使用我的代码时遇到了一些麻烦。我试图编写一个方法,它将输出2-10,000的所有素数。我仍然是java的初学者,我不知道如何去做这件事,我知道我会使用二进制搜索方法并循环执行此操作。我试图在我的教科书和在线上阅读我正在阅读的示例;这是我想出的,但它不能正常工作。我不确定这是否完全正确。任何帮助或建议如何去做或解决这个问题将不胜感激。输出素数 - Java

public static void prime() { 
    int i; // variable for loop 

    for(i=2; i<=10000; i++) 
    { 
     int factors =0; 
     int j = 1; 

     while(j<=i) 
     { 
      if(i%j == 0) 
      { 
       factors++; 
      } //End if 
      j++; 
     } 

     if(factors == 2) 
     { 
      System.out.println(i); 
     } //End if 
    }// End for 
} // End method prime 
+1

什么让你说它不能正常工作。请提供更多细节。 – sstan

+0

查看相似,回答问题[here] [1]。 [1]:http://stackoverflow.com/questions/2831192/help-with-java-program-for-prime-numbers?rq=1 – spb1994

+1

“但它不能正常工作” - 这不是最有效的方法 - 但算法是正确的,结果是好的。你为什么认为它不起作用? – alfasin

回答

1

想想什么是主要的含义:一个只能被1和自身整除的数字。使用该定义,您可以编写一个更有效的代码片段来检查当前数字是否可以被除1和其自身以外的数字(例如2)整除。

0

您可以做的一项改进是,如果一个数字如果你想在这个代码中使用breakisPrime标志作为提比超过两个因素停止测试,如果是到达第二循环

public static void printPrimes() 
{ 
    int i; 
    boolean isPrime ; 

    for(i=2; i<=10000; i++) 
    { 
     int factors ; 
     int j ; 

     factors = 1 ; 
     isPrime = true ; 

     for(j = 2; isPrime && j <= i; j++) 
     { 
      if(i%j == 0) 
      { 
       factors++; 
      } 

      if(factors > 2) 
      { 
       isPrime = false ; 
      } 
     } 

     if(isPrime) 
     { 
      System.out.println(i); 
     } 
    } 

} 

的限制之前素数这里是一个很好的答案解释了为什么两种方法都可以使用,更多是避免复杂外观条件的风格问题

Is it bad practice to use break to exit a loop in java?

+0

@StephenC及其来源是?我喜欢我的代码是清晰的,并避免休息,如果一个简单的国旗伎俩 –

+1

@MauricioGracia没有“源”编写优雅的代码。一个简单的'break'使得代码流更容易遵循,因为当'isPrime'设置为false时,你不必前后查看代码应该做什么。 – alfasin

+0

什么是“如果它是素数打印它”。和优雅的代码是非常主观的 –