Objekt Array führt zum NullPointerException

Zywen

Neues Mitglied
Hallo Java-Forum,

Ich bin noch relativ neu in der Java-Programmierung und stoße momentan auf ein Problem, welches ich nicht gelöst bekomme.

Es geht darum, dass Ich ein Programm schreiben soll, welches einen Zug setzt und verschiedene Wagen anhängen kann. Die Wagen sollen im Array wagen[] gespeichert werden. Diese bekomme ich auch initialisiert, jedoch wenn ich das Array mit einer anderen Methode ausgeben möchte kommt der NPE.

Im folgenden der relevante Teil des Codes:

Klasse Wagen:

Java:
import java.util.Scanner;

public class Wagen{

    private String ware;
    private int warenanzahl;

    public Wagen(){

    }

    public void abfragen(){

        Scanner s2 = new Scanner(System.in);
        System.out.println("Warentyp: ");
        ware = s2.next();
        System.out.println("Anzahl: ");
        warenanzahl = s2.nextInt();

    }

    public void ausgeben(){

        System.out.printf("Wagen mit " +warenanzahl+ " Einheiten " +ware+ ".\n");
    }
}
Klasse Zug:

Java:
import java.util.Scanner;

public class Zug{

    private Lok lok;
    private double hoechstgeschwindigkeit;
    private int wagen_anzahl;
    private int wagen_maximal;
    private Wagen[] wagen;

   

   
    public Zug(double hoechstgeschwindigkeit, int wagen_maximal){

        this.hoechstgeschwindigkeit = hoechstgeschwindigkeit;
        this.wagen_maximal = wagen_maximal;
       

    }

    public void anhaengen(Wagen[] wagen){

   
        
        for(wagen_anzahl = 0; wagen_anzahl <= wagen_maximal-1; wagen_anzahl++){
          
            wagen[wagen_anzahl] = new Wagen();
            wagen[wagen_anzahl].abfragen();
           
           
        }   
              
    }

    public void ausgeben(){

   
       
        for(wagen_anzahl = 0; wagen_anzahl <= wagen_maximal-1; wagen_anzahl++){
            System.out.printf("Wagen #%d \n", wagen_anzahl);
            wagen[wagen_anzahl].ausgeben();

        }
              
    }

}

Und die Main:

Java:
import java.util.Scanner;
public class main{

    public static void main(String[] args){


        System.out.println("Zug erstellen...");
        Scanner input = new Scanner(System.in);
        System.out.println("Bitte geben Sie die Hoechstgeschwindigkeit ein: ");
        double hg = input.nextDouble();
        System.out.println("Bitte geben Sie die Maximale Anzahl an Wagons ein: ");
        int ma = input.nextInt();
        Zug zug1 = new Zug(hg, ma); //Konstruktor mit User-Input erstellt

       
        Wagen[] wagen = new Wagen[ma];
       



        zug1.anhaengen(wagen);
       
        zug1.ausgeben();
    }
}

Exception:

Exception in thread "main" java.lang.NullPointerException
at Zug.ausgeben(Zug.java:49)
at main.main(main.java:29)

Also sobald er zug1.ausgeben(); aufruft kommt die Exception. Es funktioniert nur, wenn ich der Methode Zug.ausgeben die Parameter Wagen[] wagen gebe, jedoch steht im UML der Aufgabe, dass die Methode in Zug ohne Parameterübergabe erstellt werden soll..
 
Die Ursache für die NPE ist, dass deine anhaengen() Methode nicht wirklich das Feld "wagen" im Zug benutzt, sondern nur auf dem gleichnamigen Methodenparameter arbeitet. Du veränderst also lediglich die per Parameter übergebenen Wagen in dem "wagen" Parameter, aber setzt niemals this.wagen (das Feld im Zug) auf irgendetwas.
 
Vielen Lieben Dank! Es hat funktioniert. Für diejenigen, die das gleiche Problem haben:

Geändert habe Ich Zug.anheangen() wie folgt:
Java:
   public void anhaengen(Wagen[] wagen){

   
        this.wagen = new Wagen[wagen_maximal];
       
        for(wagen_anzahl = 0; wagen_anzahl <= wagen_maximal-1; wagen_anzahl++){
          
            this.wagen[wagen_anzahl] = new Wagen();
            System.out.printf("Wagen #%d \n", wagen_anzahl);
            this.wagen[wagen_anzahl].abfragen();
           
           
        } 
       
 
        
    }

    public void ausgeben(){

   
       
        for(wagen_anzahl = 0; wagen_anzahl <= wagen_maximal-1; wagen_anzahl++){
            this.wagen[wagen_anzahl].ausgeben();

        }
              
    }
 

Neue Themen


Zurück
Oben