编程新手,带有ArrayList的Java.lang.NullPointerException

时间:2011-12-08 12:51:29

标签: java arraylist nullpointerexception main

我正在尝试解决这个问题几天但没有成功。 这是代码:

import java.util.*;
import java.io.*;
public class Portefeuille {
private ArrayList<Woning> woningen;

public Portefeuille(){
    woningen = new ArrayList<Woning>();
}

public void voegToe(Woning w){
    if(woningen.contains(w)==false)
        woningen.add(w);
    else
        System.out.println(w.toString()+" komt al voor en is daarom niet toegevoegd.");
}

public ArrayList<Woning> woningenTot(int maxprijs){
    ArrayList<Woning> totaal = new ArrayList<Woning>();
    for(int i=0; i<woningen.size(); i++){
        if((woningen.get(i)).KostHooguit(maxprijs))
            totaal.add(woningen.get(i));
    }
    return totaal;
}

public static Portefeuille read(String infile){
    Portefeuille woningen = new Portefeuille();
    try
    {
        FileReader file = new FileReader(infile);
        Scanner sc = new Scanner(file);
        int aantalwoningen = sc.nextInt();
        for(int i=0; i<aantalwoningen; i++){
            Woning woning = Woning.read(sc);
            woningen.voegToe(woning);
        }
        System.out.println(woningen.toString());
        sc.close();
    } catch(Exception e){
        System.out.println(e);
      }
 return null;
 }
}

这是主文件

    import java.util.*;
    public class Test2 {
public static void main(String[] args){

    Portefeuille bestand = Portefeuille.read("in.txt");
    ArrayList<Woning> WTot = bestand.woningenTot(21500);

}
}

我得到的错误: 线程“main”java.lang.NullPointerException中的异常 在Test2.main(Test2.java:6)

如果有人能够至少指出我正确的方向,我真的很感激。

谢谢,

Jaspreet

5 个答案:

答案 0 :(得分:2)

当您最终尝试在指向null的引用上调用方法而不是对象时,您将获得NullPointerException。在您的情况下,这将是bestand.woningenTot(21500);,因为对Portefeuille.read("in.txt");的调用始终返回null

答案 1 :(得分:1)

您的Portefeuille.read("in.txt")返回null而不是woningen

    public static Portefeuille read(String infile){
        Portefeuille woningen = new Portefeuille();
        try
        {
            FileReader file = new FileReader(infile);
            Scanner sc = new Scanner(file);
            int aantalwoningen = sc.nextInt();
            for(int i=0; i<aantalwoningen; i++){
                Woning woning = Woning.read(sc);
                woningen.voegToe(woning);
            }
            System.out.println(woningen.toString());
            sc.close();
        } catch(Exception e){
            System.out.println(e);
          }
     return woningen ;
     }
    }

答案 2 :(得分:1)

在静态读取函数中返回null ...因此您无法访问第6行中的对象。 请尝试返回woningen

答案 3 :(得分:1)

方法Portefeuille.read始终返回null。您需要返回正在创建的Portefeuille。

方评论: - 始终在最后一节中调用close - 使用增强的外观而不是正常的循环。喜欢(String s:collectionOfStrings) - 尽可能使用接口而不是具体类来编程。例如:使用List而不是ArrayList

答案 4 :(得分:0)

好吧,它看起来像

public static Portefeuille read(String infile) 

始终返回null。也许应该有一个

return woningen;

在sc.close();

之后