Kann mir jemand bei folgendem Java Programmierfehler helfen?

2 Antworten

Die (unnötige) Schleife in der addWagen-Prozedur läuft nur, wenn anzahlWagen = 1 ist. Für den ersten Wagen wird also korrekt ein Objekt in das Array gelegt. Beim zweiten Wagen passiert das aber nicht.

Wenn du jetzt die Funktion getAllePlaetze aufrufst, findet die Funktion nichts an der zweiten Position im Array und wirft dadurch die Fehlermeldung aus.

Ich weiß nicht, was dir bei den Schleifen in addWagen und removeWagen durch den Kopf gegangen ist, aber du willst in beiden Fällen ja nur ein Element verändern und brauchst dadurch keine Schleife. Also bei addWagen kannst du einfach den Code verwenden:

liste[anzahlWagen++] = a;
return liste;

und bei removeWagen kannst du im else-Teil das benutzen:

liste[--anzahlWagen] = null;

Es gibt noch ein paar andere Stellen, die verbesserungswürdig sind. Angefangen davon, dass ich an deiner Stelle eher nicht mit einem Array, sondern einer Liste arbeiten würde (da kannst du ohne groß nachzudenken neue Objekte anfügen und entfernen und kannst beim entfernen auch angeben, welches Objekt entfernt werden soll) und dass du bei einer Fehlermeldung nicht einfach nur "Fehlermeldung!" ausspuckst, sondern auch was der Fehler ist (also "Die U-Bahn kann maximal 3 Wägen haben" oder "Es gibt keinen Wagen mehr, der entfernt werden kann"). Außerdem solltest du im Konstruktor von Wagen natürlich als Parameter auch "sitzplätze" und "stehplätze" anstatt a und b reinschreiben.

LeBonyt hat dir doch bereits in deiner vorherigen Frage geschrieben, dass deine Schleife falsch ist. Nun hast du sie wieder falsch.

Wenn in dem Array (namens liste) kein Element mit einem Wert belegt wird, du aber trotzdem auf diese versuchst zuzugreifen, als wären darin Wagen-Objekte, ist es nur logisch, dass NullPointerExceptions auftreten.


Steffi1997563 
Fragesteller
 10.01.2021, 11:53

und wie muss ich die schleife verändern damit es funktioniert?

0
regex9  10.01.2021, 13:32
@Steffi1997563

Du hast doch auf seine Antwort selbst noch geantwortet. Hast du dir seinen Text dennoch nicht durchgelesen? 🤨

0