如何从方法填充ArrayList <integer>?</integer>

时间:2014-12-21 10:17:00

标签: java arraylist intellij-idea

我尝试用数字填充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();
    // ...

我做错了什么?

6 个答案:

答案 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>();

如果不这样,generalArraynull(因此为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);