填充数组或列表时出现NullPointerException

时间:2015-06-03 11:01:20

标签: java arrays list nullpointerexception

我试图使用另一个值数组填充数组并对列表执行相同操作但是为数组获取空指针异常并且没有使用该列表发生任何事情。以下是代码段:

public class EMPTest {
    public static void main(String[] args) {
        //Array
        EMP[] emps = new EMP[(5)];
        String[] values = {"2","4","6","8","10"};
        for(int i=0; i<emps.length; i++){
            for(int j=0; j<values.length; j++){
                emps[i].setId(values[j]); //NullPointerException happened here
                emps[i].setName(values[j]);
                emps[i].setDep(values[j]);
                emps[i].setSal(values[j]);
            }
        }
        System.out.println("emps: "+emps);
        //List
        List<EMP> empL = new ArrayList<EMP>(5);
        List<String> val = new ArrayList<String>();
        val.add("a");
        val.add("b");
        val.add("c");
        val.add("d");
        val.add("e");

        List<EMP> storedEMPs = null;
        for(EMP e : empL){
            for(String vals : val){
                e.setId(vals);
                e.setName(vals);
                e.setSal(vals);
                e.setDep(vals);
                storedEMPs.add(e);
            }
        }
        System.out.println("Populated EMPs: "+storedEMPs);
    }
}

输出:

Exception in thread "main" java.lang.NullPointerException
    at com.test.EMPTest.main(EMPTest.java:12)

4 个答案:

答案 0 :(得分:2)

您创建了一个大小为5的空数组:

EMP[] emps = new EMP[5];

然后你尝试访问一个自然等于null的索引。 (emps[0] is null
在尝试访问数组之前,您必须初始化数组的每个对象! :

[...]
EMP[] emps = new EMP[(5)];
String[] values = {"2","4","6","8","10"};
for(int i=0; i<emps.length; i++){
    for(int j=0; j<values.length; j++){
        emps[i] = new EMP(...); //Initialize it first !
        emps[i].setId(values[j]);
        emps[i].setName(values[j]);
        emps[i].setDep(values[j]);
        emps[i].setSal(values[j]);
    }
}

此外,您将始终使用数组emps[i]中包含的最后一个值覆盖values

我认为你的代码出错了,你最好写一下:

EMP[] emps = new EMP[5];
String[] values = {"2","4","6","8","10"};
for(int i=0; i<emps.length; i++){
    emps[i] = new EMP(...);
    emps[i].setId(values[i]);
    emps[i].setName(values[i]);
    emps[i].setDep(values[i]);
    emps[i].setSal(values[i]);
}

答案 1 :(得分:2)

因为没有任何内容存储在数组

执行此操作时:

    EMP[] emps = new EMP[(5)];

您只需创建一个具有足够空间的数组来存储5 EMP,此数组中没有任何内容。

尝试:

    String[] values = {"2","4","6","8","10"};
    for(int i=0; i<emps.length; i++){
        emps[i] = new EMP();//Need to initialize object here!
        for(int j=0; j<values.length; j++){
            emps[i].setId(values[j]); 
            emps[i].setName(values[j]);
            emps[i].setDep(values[j]);
            emps[i].setSal(values[j]);
        }
    }

注意:

我认为你想这样做,因为在上述情况下调用嵌套循环没有任何意义:

    for(int i=0; i<emps.length; i++){
        emps[i] = new EMP();//Need to initialize object here!
        emps[i].setId(values[i]); 
        emps[i].setName(values[i]);
        emps[i].setDep(values[i]);
        emps[i].setSal(values[i]);    
    }

答案 2 :(得分:2)

emp[i]为空。你必须在调用setter之前设置emp[i] = new EMP()

emps[i]  = new EMP();
for(int j=0; j<values.length; j++){
   emps[i].setId(values[j]); //NullPointerException happened here

答案 3 :(得分:1)

您的数组已正确初始化EMP[] emps = new EMP[(5)];但在每个数组位置都没有任何内容,这意味着它是NULL,因此您将获得NullPointer。 您需要首先初始化每个位置,如emps[0] = new EMP(); emps[1] = new EMP(); ...,然后您可以在其上执行方法。