2010-11-29 137 views
1

我試過修復這個問題,我只是無法找到解決這個問題的方法。該代碼旨在打印範圍內的素數,但它只是返回錯誤Java錯誤「未定義的名稱」

Static Error: Undefined name 'PrimeNumbers

請問誰能幫我?

這是我的代碼:

import java.util.*; 

public class PrimeNumbers { 

    private List<Integer> listOfPrimeNumbers; //add a member variable for the ArrayList 
    public static void main(String args []){  
     PrimeNumbers primeNumberList = new PrimeNumbers(50); 
     primeNumberList.print(); //use our new print method 
    } 

public PrimeNumbers (int initialCapacity) { 
    listOfPrimeNumbers = new ArrayList<Integer>(initialCapacity/2); //initialCapacity/2 is an easy (if not tight) upper bound 
    long numberOfPrimes = 0; //Initialises variable numberOfPrimes to 0 
    int start = 2; 
    boolean[] isPrimeNumber = new boolean[initialCapacity + 1]; 

    for (int i=0;i==initialCapacity;i++) {//setting all values in array of booleans to true 
    isPrimeNumber[i] = true; 
    } 
    while (start != initialCapacity) 
     { 
      if (isPrimeNumber[start]) 
      { 
      listOfPrimeNumbers.add(start); 
      //add to array list 
      numberOfPrimes++; 
      for (int i = start; start < initialCapacity; i+=start) 
      { 
       isPrimeNumber[i] = false; 
      } 
      } 
      start++; 
     } 
    } 

    public void print() { 
    int i = 1; 
    for (Integer nextPrime:listOfPrimeNumbers) { 
     System.out.println("the " + i + "th prime is: " + nextPrime); 
     i++; 
    } 
    } 
//or just System.out.println(listOfPrimeNumbers);, letting ArrayList's toString do the work. i think it will be in [a,b,c,..,z] format 

public List getPrimes() { 
    return listOfPrimeNumbers; 
} //a simple getter isnt a bad idea either, even though we arent using it yet 
} 
+2

你如何啓動你的代碼? – 2010-11-29 13:17:56

回答

3

假設,你有你的代碼組織這樣

./project 
    PrimeNumbers.java 
    PrimeNumbers.class 

那麼你cd./project並鍵入

java PrimeNumbers 

注意 - 這隻適用於因爲您沒有申報包裹(iaw:您的課程爲,默認包裝爲)。通常你有一個包裝聲明,然後它看起來有點不同。


獎金

吸氣是個好主意,但返回集合之前應該三思而後行,因爲這樣一來,您授予接收機完全訪問你的(內部?)數據結構和他可以改變該集合的值。你不應該用原始類型來聲明它。下面就來實現它有更好的方式:

public List<Integer> getPrimes() { 
    return Collections.unmodifiableList(listOfPrimeNumbers); 
} 

現在接收器知道,他得到的Integer值的列表,並不能修改的結果。