2011-12-08 5 views
0

私は数日前からこの問題に取り組んでいますが、成功していません。ここ はコードです:Test2.mainでjava.lang.NullPointerExceptionが スレッドで 例外 "メイン"(:プログラミングの初心者で、ArrayListを使ったJava.lang.NullPointerException

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); 

} 
} 

私は取得していますエラーですTest2.java:6)

誰かが少なくとも私を正しい方向に向けることができたら本当に感謝します。

おかげで、

Jaspreet

+0

何が..? KostHooguit(maxprijs)のファイルに何が書かれているのか、また "KostHooguit"は何ですか?そして完全にスタックトレースをお願いします – FUD

答えて

0

は、まあそれは

public static Portefeuille read(String infile) 

は常にnullを返しているように私には見えます。多分)(sc.close後

があるはずです。

+0

ああ、私は今それを見る、私の愚かだった! –

2

オブジェクトではなくヌルを指す参照でメソッドを呼び出すと、NullPointerExceptionが発生します。あなたの場合はbestand.woningenTot(21500);になります。Portefeuille.read("in.txt");への呼び出しは常にnullを返すためです。

1

Portefeuille.read("in.txt")woningenの代わりにnullを返します。

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 ; 
    } 
    } 
1

あなたは、静的な読み取り機能でnullを返す...だからあなたはカントは、LINE6内のオブジェクトをアクセスも。 代わりにwoningenを返すようにしてください。

+0

みなさんありがとう! –

1

メソッドPortefeuille.readは常にnullを返します。作成しているPortefeuilleを返す必要があります。

サイドコメント: - finallyセクションで常に閉じるようにします。 - forループの代わりに拡張ルックを使用します。 like(String s:collectionOfStrings) - 可能であれば、具体的なクラスの代わりにインターフェイスを使用してプログラムを試してください。例:ArrayListの代わりにListを使用

関連する問題