Я пытаюсь написать этот код, чтобы получить первые простые числа initialCapacity, а затем распечатать их последовательно, используя java. Это не работает по двум причинам, во-первых, я получаю сообщение об ошибке
41: на нестатическую переменную listOfPrimeNumbers нельзя ссылаться из статического контекста.
когда я пытаюсь запустить программу, но даже когда я меняю переменную на статическую и запускаю программу, она выводит только «1». Таким образом, цикл while в конструкторе Primes повторяется только один раз, а затем останавливается, и я просто не могу найти там проблему, как бы я ни искал! Может ли кто-нибудь помочь мне, пожалуйста, даже если бы вы могли просто очень быстро взглянуть и сказать мне, что может быть не так, я был бы очень признателен.
Кроме того, как обстоят дела с нестатическими и статическими переменными и методами? Какова наилучшая практика при их использовании? Если бы кто-нибудь мог связать меня со страницей, описывающей это (я безрезультатно гуглил!), я бы с удовольствием прочитал :)
Большое спасибо всем вам !
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 ) );
}
}