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:
Klasse Zug:
Und die Main:
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..
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");
}
}
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..