【发布时间】:2011-05-17 13:43:48
【问题描述】:
我正在尝试编写此代码来获取第一个 initialCapacity 素数,然后使用 java.xml 依次打印它们。它不起作用有两个原因,首先我收到错误
41: 不能从静态上下文引用非静态变量 listOfPrimeNumbers
当我尝试运行程序时,即使我将变量更改为静态并运行程序,它也只会打印出“1”。所以它只是在构造函数 Primes 中迭代 while 循环一次,然后停止,无论我多么努力,我都找不到那里的问题!任何人都可以帮助我,即使您可以快速查看并告诉我可能出了什么问题,我真的很感激。
另外,关于非静态和静态变量和方法的故事是什么?使用这些时的最佳做法是什么?如果有人可以将我链接到描述此内容的页面(我用谷歌搜索无济于事!)我很乐意阅读:)
非常感谢大家!
import java.util.*;
public class Primes {
private ArrayList<Integer> listOfPrimeNumbers;
public static void main(String[] args) {
ArrayList<Integer> listOfPrimeNumbers;
Primes generator=new Primes(50);
print();
}
public Primes( int initialCapacity) {
listOfPrimeNumbers = new ArrayList<Integer>(initialCapacity);
int index=0;
int counter=0;
while (counter != initialCapacity ) {
if (isPrime(index)) {
listOfPrimeNumbers.add(index);
counter++;
System.out.println(counter);
index++;
}
else {
index++;
}
}
}
public boolean isPrime(int candidateNo) {
Iterator<Integer> iter = listOfPrimeNumbers.iterator( );
//in here ! ?
int i=2;
while ( iter.hasNext( ) ) {
int next = iter.next( );
if (next%i==0 && i!=1) {
return false;
}
}
return true;
}
public static void print( ) {
int n = listOfPrimeNumbers.size();
for(int i = 0; i <= n ; i++)
System.out.println( listOfPrimeNumbers.get( i ) );
}
}
我现在已经编辑了我的代码,所以一切都是静态的(这意味着我可以有多个实例?)。我现在有了这个,问题是它只是打印出前 51 个数字,然后出现堆栈溢出,有人可以帮忙吗?谢谢 :) :
import java.util.*;
public class Primes {
private static ArrayList<Integer> listOfPrimeNumbers;
public static void main(String[] args) {
ArrayList<Integer> listOfPrimeNumbers;
Primes generator=new Primes(50);
print();
}
public Primes( int initialCapacity) {
listOfPrimeNumbers = new ArrayList<Integer>(initialCapacity);
int index=2;
int counter=0;
while (counter != initialCapacity ) {
if (isPrime(index)) {
listOfPrimeNumbers.add(index);
counter++;
System.out.println(counter);
index++;
}
else {
index++;
}
}
}
public boolean isPrime(int candidateNo) {
Iterator<Integer> iter = listOfPrimeNumbers.iterator( );
while ( iter.hasNext( ) ) {
int next = iter.next( );
if (next%candidateNo==0 && candidateNo!=1) {
return false;
}
}
return true;
}
public static void print( ) {
int n = listOfPrimeNumbers.size();
for(int i = 0; i <= n ; i++)
System.out.println( listOfPrimeNumbers.get( i ) );
}
}
【问题讨论】:
标签: java static instance-variables primes