我试过修复这个我似乎无法找到解决这个问题的方法。该代码用于打印范围中的素数,但它只返回错误
静态错误:未定义的名称'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
}
答案 0 :(得分:3)
假设你有像这样组织的代码
./project
PrimeNumbers.java
PrimeNumbers.class
然后你cd
到./project
并输入
java PrimeNumbers
注意 - 这只能起作用,因为你没有声明一个包(iaw:你的类是默认包中的 )。通常你有一个包装声明然后它看起来有点不同。
<强>加成强>
getter是一个好主意,但在返回集合之前你应该三思而后行,因为这样,你授予接收者对你的(内部?)数据结构的完全访问权限,并且他可以改变该集合的值。并且您不应该使用原始类型声明它。这是实现它的更好方法:
public List<Integer> getPrimes() {
return Collections.unmodifiableList(listOfPrimeNumbers);
}
现在接收者知道他得到了Integer
值的列表,并且无法修改结果。