2015-02-07 3 views
0

В конструкторе моего класса я инициализирую логический массив с boolean[] list = new boolean[n], где n - единственный параметр для конструктора, и каждый индекс list присваивает trueArrays.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, поэтому метод, что исключение в должен быть в состоянии получить доступ к массиву. Я также внес изменения, которые предложил Эран, прежде чем публиковать этот блок кода.

+1

Показать конструктор (я подозреваю, вы слежка 'list'). – August

+0

показать весь ваш конструктор, а также, как это n все еще относится к параметру в конструкторе – Tarik

ответ

1

Поскольку у вас есть это - boolean[] list = new boolean[n]; - в вашем конструкторе этот массив объявляется и инициализируется локально в конструкторе. Метод обращается к другому массиву с тем же именем (возможно, членом, который вы объявили в своем классе), который не инициализирован.

Изменение инициализации в конструкторе, чтобы:

list = new boolean[n]; 
+0

Я пробовал это, и я все равно получаю то же самое. – bagochips44

Смежные вопросы