为什么我在这个布尔数组上得到NullPointerException?

时间:2015-02-07 05:24:27

标签: java arrays nullpointerexception boolean

在我的类'构造函数中,我使用boolean[] list = new boolean[n]初始化一个布尔数组,其中n是构造函数的唯一参数,我将list的每个索引分配给{{1}与true。编辑:Arrays.fill(list, true)首先在list

的构造函数外部创建

然后在方法中我这样做:

private boolean[] list

并且//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; } } } 会抛出NullPointerException,即使我使用if(list[i])初始化了所有list。我最初有一个循环,它将Arrays.fill(list, true)中的所有内容单独设置为true,并且给出了相同的错误,所以现在我很难过。

编辑:这是完整的构造函数。

list

我遗漏了一件事,我刚刚意识到这很重要:我使用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,因此抛出异常的方法应该能够访问数组。在发布这段代码之前,我还做了Eran建议的更改。

1 个答案:

答案 0 :(得分:1)

由于在构造函数中有这个 - boolean[] list = new boolean[n]; - ,因此在构造函数中声明并初始化此数组。该方法访问一个具有相同名称的不同数组(可能是您在类中声明的成员),该数组未初始化。

将构造函数中的初始化更改为:

list = new boolean[n];