在这段代码中,Null Pointer Exception的原因是什么?

时间:2012-03-29 10:00:07

标签: java nullpointerexception

我在以下代码中遇到null-exception throw错误。可能是什么原因?

 public static String[] CreateVocab(BufferedReader buffR) throws IOException{
    String[] arr = null;
    int i = 0;
    arr[i]= null;
    String line = new String();
    while((line = buffR.readLine()) != null){
        arr[i] = line;
        i=i+1;
    }
    return arr;     
}

编译器在代码中显示Null ponter异常 arr[i]=null

3 个答案:

答案 0 :(得分:6)

这是原因:

String[] arr = null;
int i = 0;
arr[i]= null; // 'arr' is null

由于读取的行数未知,建议使用ArrayList<String>存储读取的行,并使用ArrayList.toArray()返回String[](如果返回ArrayList<String>是不可接受的。)

返回List<String>

的示例
public static List<String> CreateVocab(BufferedReader buffR)
    throws IOException
{
    List<String> arr = new ArrayList<String>();
    String line;
    while((line = buffR.readLine()) != null){
        arr.add(line);
    }
    return arr;     
}

要将数组更改return返回到:

return arr.toArray(new String[]{});

答案 1 :(得分:3)

您还没有创建数组 - 并且数组无论如何都无法解决您的问题,因为它无法调整大小。我们事先并不知道行数。

改为使用集合:

public static String[] CreateVocab(BufferedReader buffR) throws IOException{
    List<String> lines = new ArrayList<String>();
    String line = null;
    while((line = buffR.readLine()) != null){
        lines.add(line);
    }
    return lines.toArray(new String[]{});     
}

答案 2 :(得分:1)

String[] arr = null; //here you are setting arr to null
int i = 0;
arr[i]= null;        // here you are trying to reference arr