2010-11-29 3 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 

Примечание - это только работает ause вы не объявили пакет (iaw: вы класс в пакете по умолчанию). Обычно у вас есть декларация пакета, и тогда она выглядит несколько иначе.


Bonus

Поглотитель это хорошая идея, но вы должны дважды подумать, прежде чем вернуться в коллекции, потому что таким образом, вы предоставляете ресивер полный доступ к вашим (внутренним?) Структуре данных и он может изменять значения этой коллекции. И вы не должны объявлять его с необработанным типом. Вот лучший способ ее реализации:

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

Теперь приемник знает, что он получает список из Integer значений и не может изменить результат.

Смежные вопросы