Впервые в программировании Java.lang.NullPointerException с ArrayList - PullRequest
0 голосов
/ 08 декабря 2011

Я пытаюсь решить эту проблему в течение нескольких дней, но безуспешно. Вот код:

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 ]

2 голосов
/ 08 декабря 2011

Вы получите исключение NullPointerException, если в итоге попытаетесь вызвать метод по ссылке, указывающей на ноль, а не на объект. В вашем случае это будет bestand.woningenTot(21500);, потому что вызов Portefeuille.read("in.txt"); всегда возвращает null.

1 голос
/ 08 декабря 2011

Метод Portefeuille.read всегда возвращает ноль.Вам нужно вернуть созданный вами Portefeuille.

Дополнительные комментарии: - Всегда вызывайте close в секции finally - Используйте для циклов улучшенный внешний вид вместо обычного.Как для (String s: collectionOfStrings) - Попробуйте программировать, используя интерфейсы вместо конкретных классов, если это возможно.Например: используйте список вместо ArrayList

1 голос
/ 08 декабря 2011

вы возвращаете null в вашей статической функции чтения ... Таким образом, вы не можете получить доступ к объекту в строке6. Попробуйте вместо этого вернуть woningen.

1 голос
/ 08 декабря 2011

Ваш 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 ;
     }
    }
0 голосов
/ 08 декабря 2011

Ну, мне кажется,

public static Portefeuille read(String infile) 

всегда возвращает ноль.Возможно, после sc.close ();

должно быть
return woningen;

...