我尝试用数字填充ArrayList<Integer>
。当我在main方法中调用方法时,编译器会抱怨
Exception in thread "main"`
java.lang.NullPointerException
at PrimeSum.setGeneralArray(PrimeSum.java:11)
at PrimeSum.main(PrimeSum.java:36)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)
Process finished with exit code 1
这是我的代码示例。
public class PrimeSum {
private ArrayList<Integer> generalArray;
private int limit;
public void setGeneralArray() {
for(int i = 2; i < 2000001; i++) {
generalArray.add(i);
}
}
// ...
// This is how I call on the method.
public static void main(String[] args) {
PrimeSum ps = new PrimeSum();
ps.setGeneralArray();
// ...
我做错了什么?
答案 0 :(得分:0)
你忘记初始化我的朋友ArrayList。
private ArrayList<Integer> generalArray = new ArrayList<Integer>();
最好的方法是在构造函数中初始化它。
public class PrimeSum {
private ArrayList<Integer> generalArray;
private int limit;
public PrimeSum(){
generalArray = new ArrayList<Integer>();
}
public void setGeneralArray() {
for(int i = 2; i < 2000001; i++) {
generalArray.add(i);
}
}
...
//This is how I call on the method.
public static void main(String[] args) {
PrimeSum ps = new PrimeSum();
ps.setGeneralArray();
...
答案 1 :(得分:0)
数组缺少初始化:
private ArrayList<Integer> generalArray = new ArrayList<Integer>();
如果不这样,generalArray
为null
(因此为NullPointerException
)。
private ArrayList<Integer> generalArray;
public PrimeSum(){
generalArray = new ArrayList<Integer>();
}
答案 2 :(得分:0)
generalArray
是引用类型,其初始值为null
,这是JLS 4.12.5. Initial Values of Variables状态:
对于所有引用类型(§4.3),默认值为
null
。
ReferenceType:
ClassOrInterfaceType
TypeVariable
ArrayType
要初始化它,您应该使用new
关键字并调用符合您需求的构造函数。
答案 3 :(得分:0)
当您调用generalArray
时,实例字段null
仍为add
。
您需要在填充之前对其进行初始化。
要么声明:
private ArrayList<Integer> generalArray = new ArrayList<Integer>();
或者在构造函数中:
public PrimeSum() {
generalArray = new ArrayList<Integer>();
}
或者在实例声明中:
{
generalArray = new ArrayList<Integer>();
}
答案 4 :(得分:0)
默认情况下,java中的所有对象都初始化为null,并且您试图说null.add(number)
,因此您将获得空指针异常。有关详细信息,请参阅this。你需要初始化它。你可以直接在课堂上做到这一点
private ArrayList<Integer> generalArray = new ArrayList<Integer>();
或者你可以在构造函数中初始化它,只要你像在PrimeSum ps = new PrimeSum();
那样创建一个类型为PrimeSum的对象时调用它。你可以这样做:
public PrimeSum () {
generalArray = new ArrayList<Integer>();
}
答案 5 :(得分:0)
创建一个整数的arraylist
ArrayList<Integer> generalArray = new ArrayList<Integer>
用于在列表中添加项目 这样做:
generalArray.add(1);
generalArray.add(2);
generalArray.add(3);