2013-07-03 51 views
-1

我想顯示用戶所需的素數。例如,如果用戶想要3rd prime,我將顯示5.我有以下java代碼。用戶在Java中需要的素數

import java.util.Scanner; 

public class Prime { 

private static Scanner scanner; 


public static void main(String args[]) { 

//get input till which prime number to be printed 
// System.out.println("Enter which prime number to be printed: "); 
// scanner = new Scanner(System.in); 
// int limit = scanner.nextInt(); 
    int count = 0; 
    int number = 2; 
    //System.out.println("Printing prime number from 1 to " + limit); 
    while(count<=3) 
    { 
     if(isPrime(number)){ 
      count++; 
     // System.out.println(count); 
     } 
     number++; 
    } 
    if(count == 3) 
     System.out.println("10001 prime is "+number); 

    } 


public static boolean isPrime(int number){ 
    for(int i=2; i<number; i++){ 
     if(number%i == 0){ 
      return false; 
     } 
    } 
    return true; 
} 
} 

當我運行它時,我無法獲取任何輸出。我哪裏錯了? PS:對於目前來說,我運行的循環只有等到3

+0

檢查你的循環 – John

+1

你試過調試嗎? – Uooo

+0

我想知道你如何添加一個數字並檢查?!我相信素數是奇數,關於您的主要檢查也是如此!不好的算法。 :\ – 2013-07-03 06:54:41

回答

0

這裏是更正的代碼,工作。

public class Main { 

public static void main(String args[]) { 
    //Returns fourth prime number 
    System.out.println(getPrimeNumber(4)); 


} 

public static int getPrimeNumber(int order) { 

    int currentOrder = 1; 
    int currentNumber = 1; 

    while (currentOrder < order) { 
     currentNumber++; 
     if (isPrime(currentNumber)) currentOrder++; 
    } 

    return currentNumber; 

} 


public static boolean isPrime(int number) { 
    for (int i = 2; i < number; i++) { 
     if (number % i == 0) { 
      return false; 
     } 
    } 
    return true; 
} 

}

沒有必要在0開始計數的,它在數學錯誤與2號開始!只需從order和currentNumber開始初始化爲1,並且如果第一個素數是您的用戶正在查找的內容,則不需要循環!

此外,正確變量初始化後的環路條件已從「< =」更正爲「<」。

就這樣!

+0

O我明白了,當然,我真的很抱歉:D – 2013-07-03 10:18:11

+0

但是你的程序顯示爲5.但實際上,5是第三個素數.... – Benny

1

不管怎麼說較好的解決辦法是

public void calcPrime(int inp) { 
ArrayList<Integer> arr = new ArrayList<Integer>(); 
arr.add(2); 
arr.add(3); 

int counter = 4; 

while(arr.size() < inp) { 
    if(counter % 2 != 0 && counter%3 != 0) { 
     int temp = 4; 
     while(temp*temp <= counter) { 
      if(counter % temp == 0) 
       break; 
      temp ++; 
     } 
     if(temp*temp > counter) { 
      arr.add(counter); 
     } 
    } 
    counter++; 
} 

System.out.println("finish" +arr.get(inp-1)); 
} 
} 
+1

實際上,這在代碼可讀性方面是非常糟糕的。另外,爲更大的素數擴展和保留ArrayList的開銷 - 嘗試查找第1024個素數並查看您的內存使用情況。 – 2013-07-03 07:10:15

5

你有while(count <= 3)所以當你退出循環,count == 4

因此,您的if(count == 3)從不輸入,也不會打印任何內容。