我正在尝试解决这个问题几天但没有成功。 这是代码:
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
答案 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();
之后