我正在尝试编写此代码以获取第一个initialCapacity质数,然后使用java按顺序打印它们。它不起作用有两个原因,首先是我得到了错误
41:不能从静态上下文中引用非静态变量listOfPrimeNumbers
当我尝试运行程序时,即使将变量更改为static并运行程序,它也只会打印出“ 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 ) ); } }
listOfPrimeNumbers是您的类的成员,这意味着的每个实例Primes都有其自己的副本listOfPrimeNumbers。
listOfPrimeNumbers
Primes
print是一个静态函数,这意味着它与的实例无关Primes,因此,它无法访问其中的任何listOfPrimeNumbers变量(每个类实例一个)。
print
因此listOfPrimeNumbers必须是静态的(即整个世界中只有一个副本),或者print不能是静态的。