Java: Schleife über ArrayList -> NullPointerException

Alles, was nicht direkt mit Python-Problemen zu tun hat. Dies ist auch der perfekte Platz für Jobangebote.
Antworten
Üpsilon
User
Beiträge: 222
Registriert: Samstag 15. September 2012, 19:23

Hallo ihr Lieben :D ,
ich lerne neuerdings Java und habe folgendes Problem:
Ich deklariere in einer Klasse als Attribut eine ArrayList, erstelle die ArrayList im Konstruktor und hänge mit add ein Element ran. Danach wird die ArrayList nicht mehr verändert. In einer Methode, die später aufgerufen wird, steht eine For-Schleife mit
for (Typ laufvariable : liste) {, und in dieser Zeile bekomm ich eine NullPointerException, obwohl die Liste doch eigentlich nicht leer ist. Wieso passiert das und wie kann ich das reparieren?
Ich benutze die Lernumgebung Greenfoot, falls das eine Rolle spielen sollte. Den genauen Code habe ich momentan nicht dabei.
Danke und Grüße
BlackJack

@Üpsilon: Ich würde sagen da musst Du Quelltext zu zeigen.
BlackJack

@BlackJack: Es kann ja eigentlich nur zwei Möglichkeiten geben: Entweder `liste` selbst ist ``null``, oder `Typ` ist primitiv und in der Liste ist ein ``null`` als Wert was dann nicht ”ausgepackt” werden kann. Das ist der vielleicht nicht auf den ersten Blick offensichtliche Fall.
[codebox=java file=Unbenannt.java]import java.util.ArrayList;
import java.util.Collection;

public class Main {

private final Collection<Integer> liste;

public Main() {
liste = new ArrayList<>();
liste.add(23);
liste.add(42);
// liste.add(null);
}

private void someMethod() {
for (int zahl : liste) {
System.out.println(zahl);
}
}

public static void main(String[] args) {
Main main = new Main();
main.someMethod();
}
}[/code]
Üpsilon
User
Beiträge: 222
Registriert: Samstag 15. September 2012, 19:23

Danke für die Antwort.
Ich ahne schon, was der Fehler ist. Ist wahrscheinlich ein Java-Anfängerfehler. Werde demnächst berichten.
PS: Die angebotene Summe ist beachtlich.
Üpsilon
User
Beiträge: 222
Registriert: Samstag 15. September 2012, 19:23

Der Fehler war, dass ich im Konstruktor stehen hatte ArrayList liste = new ArrayList();, und wegen der Typangabe vor dem Variablennamen wurde dem Attribut liste kein Wert zugewiesen, sondern eine lokale Variable erstellt, die außerhalb des Konstruktors nicht mehr existierte. In der anderen Methode wurde dann bei der For-Each-Schleife auf die auf Klassenebene deklarierte liste zugegriffen, die aber nie einen Wert bekommen hatte und immer noch null war. Da muss man ganz doll aufpassen, dass man nicht den Datentypen davor schreibt, wenn man ein Attribut mit einem Wert belegen will!
PS: Die angebotene Summe ist beachtlich.
Antworten