Java错误“未定义的名称”

时间:2010-11-29 13:12:39

标签: java

我试过修复这个我似乎无法找到解决这个问题的方法。该代码用于打印范围中的素数,但它只返回错误

  

静态错误:未定义的名称'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
}

1 个答案:

答案 0 :(得分:3)

假设你有像这样组织的代码

./project
   PrimeNumbers.java
   PrimeNumbers.class

然后你cd./project并输入

java PrimeNumbers

注意 - 这只能起作用,因为你没有声明一个包(iaw:你的类是默认包中的 )。通常你有一个包装声明然后它看起来有点不同。


<强>加成

getter是一个好主意,但在返回集合之前你应该三思而后行,因为这样,你授予接收者对你的(内部?)数据结构的完全访问权限,并且他可以改变该集合的值。并且您不应该使用原始类型声明它。这是实现它的更好方法:

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

现在接收者知道他得到了Integer值的列表,并且无法修改结果。