Daniel Thoma: Java Hausaufgabe mit Klassen

Beitrag lesen

Hallo Oliver und Raffi!

Wenn switch(1) aufgerufen wird, wird das Auto-Objekt a1 erstellt. Das _kann_ passieren, _muss_ aber nicht. Denn falls nur case 2 eintritt, existiert a1 überhaupt nicht (auch wenn Du durch die Schleife eigentlich sicherstellst, dass zuerst switch(1) durchlaufen wird). In der Regel gilt: Alle innerhalb einer bedingten Anweisung deklarierten Objekte sind von "außerhalb" nicht zugänglich und werden vom Compiler angekreidet, falls man sie trotzdessen benutzen möchte. Deklariere deshalb das Auto a1 _vor_ der switch-Anweisung und nicht in einer bedingten Verzeigung.

Die verschiedenen case zweige werden ja in unterschiedlichen Schleifendurchläufen ausgeführt. Wenn man nun einfach die Deklaration der Variable nach vorn stellt, kompiliert das Programm also immer noch nicht, da die Variable nicht immer initialisiert wird.

Das Programm soll ja im case 2 Zweig ein beleibiges Auto über eine Nummer ansprechen können. Dafür braucht man eine Liste, in die man die Autos speichern kann. Diese Liste muss natürlich außerhalb der Schleife deklariert werden, damit sie immer verfügbar ist.

Listen gibt es im Paket java.util.*;

Kleines Beispiel wie man das Problem lösen könnte:

java.util.ArrayList liste = new java.util.ArrayList();

for(...) {
  switch(...) {
    case 1:
      Auto a1 = new Auto(); //neues Auto erzeugen wie gehabt.
      liste.add(a1); // neues Auto speichern.
      break;
    case 2:
      int i = ...; //Auto Nummer einlesen.
      Auto a1 = (Auto)liste.get(i) //Auto aus der Liste holen.
  }
}

Grüße

Daniel