2014-02-06 59 views
0

我正在處理PrimeSieve的ArrayList實現,並且我已經編寫了所有代碼,但似乎無法運行,所以我不確定是因爲循環是壞的還是因爲我設置了錯誤的掃描儀。掃描儀不工作 - Prime篩子。代碼已完成

這是代碼。

import java.util.Scanner; 
import java.util.ArrayList; 


public class PrimeSieve { 

public static void main(String[] args) 
{ 
    int inputNum; 
    Scanner SL = new Scanner(System.in); 
    System.out.print("Pick a number to count up from:"); 
    inputNum = SL.nextInt(); 
    ArrayList<Boolean> BL = findPrime(inputNum); 
    System.out.println("The prime numbers found:"); 
    for(int i = 0; i < inputNum; i++) 
    { 
     if(BL.get(i) == true) 
     { 
      System.out.println(i + ", "); 
     } 
    } 
} 

public static ArrayList<Boolean> findPrime(int maxNum) 
{ 
    ArrayList<Boolean> BL = new ArrayList<Boolean>(); 


    //Filling in the list. 
    for(int i = 0; i < maxNum; i++) 
    { 
     BL.add(true); 

    } 

    for(int i = 0; i * i <(maxNum); i++) 
    { 
     if(BL.get(i) == true) 
     { 
      for(int k = i*2; k < maxNum; k = k + i) 
      { 
       BL.set(i, false); 
      } 
     } 

    } 
    return BL; 


} 

} 

一旦我輸入任何數字,然後按回車,什麼都不起作用。我的假設是,該計劃不斷在某處循環,並且必須被打破。

+0

有什麼問題是什麼呢?編譯錯誤?例外?什麼都沒有發生?錯誤的結果...? – amit

+1

你輸入了什麼(**和**回車)?我問這個,因爲你沒有提供任何示例輸入和輸出。 – skiwi

+0

將一些System.out.println()調用添加到循環中以確保它們已執行。或者使用調試器。 –

回答

1

還有就是你的問題:

for (int i = 0; i * i < (maxNum); i++) { 
    if (BL.get(i) == true) { 
     for (int k = i * 2; k < maxNum; k = k + i) { 
      BL.set(i, false); 
     } 
    } 
} 

首先iteraction(I = 0):

for (int k = 0 * 2; k < maxNum; k = k + 0) 

它像:

for (int k = 0 ; k < X ; k = k + 0) 

修復吧:)

關於您的問題......很容易的傢伙(使用調試:)):

for (int i = 2; i * i < (maxNum); i++) { 
    if (BL.get(i) == true) { 
     for (int k = i * 2; k < maxNum; k = k + i) { 
      BL.set(k, false); 
     } 
    } 

} 

變化:

int i = 2; 

BL.set(k,false); 

你必須自己學習它:(

+0

現在已經全部修好了,但很明顯,我的編碼出了問題......列表中的幾乎每一個條目都出現了質數。 – Tuskaugur

4

你無休止的循環在這裏:

for(int k = i*2; k < maxNum; k = k + i) 

i是0和k爲0,因此每一步k=0+0

+0

Yeap,這是問題的答案,在另外BL.set(i,false)應該是BL.set(k,false)。 – amit

+0

該死的,我知道我錯過了一些東西。謝謝! 你如何解決這個問題?我正在抓我的腦袋...... – Tuskaugur