В конструкторе моего класса я инициализирую логический массив с boolean[] list = new boolean[n]
, где n
- единственный параметр для конструктора, и каждый индекс list
присваивает true
Arrays.fill(list, true)
. EDIT: list
сначала создается вне конструктора с private boolean[] list
Почему я получаю исключение NullPointerException в этом булевом массиве?
Тогда в методе я делаю это:
//n still refers to the parameter in the constructor
for(int i = 2; i < n; i++){
if(list[i]){
for(int j = i; j < n; j*=i){
list[j] = false;
}
}
}
И if(list[i])
бросает NullPointerException, даже если я инициализируюсь все list
с Arrays.fill(list, true)
. У меня первоначально был цикл, который индивидуально устанавливал все в list
в true, и это давало ту же ошибку, так что теперь я в тупике.
EDIT: Вот полный конструктор.
public Seive(int n){
//create an array of booleans of length n
list = new boolean[n];
this.n = n;
//set all booleans in the array to true
Arrays.fill(list, true);
//set 0 and 1 to false so that the algorithm can ignore them
//and they won't be put into the list of primes
list[0] = false;
list[1] = false;
}
Я оставил одну вещь, что я только что понял, что важно: я создаю list
вне конструктора с private boolean[] list
, поэтому метод, что исключение в должен быть в состоянии получить доступ к массиву. Я также внес изменения, которые предложил Эран, прежде чем публиковать этот блок кода.
Показать конструктор (я подозреваю, вы слежка 'list'). – August
показать весь ваш конструктор, а также, как это n все еще относится к параметру в конструкторе – Tarik