Nummerierung einzelner Objekte

Michi101

Neues Mitglied
Hallo,

ich bin noch ein Anfänger in Java und habe eine kleine Aufgabe im Studium wo ich nicht weiterkomme.

Die Aufgabe besteht daraus, dass man ein Zug baut aus einzelnen Waggons. Die verschieden Typen des Waggons werden durch eine Enum Klasse Type repräsentiert. Die verschiedenen Waggontypen sind ENGINE, FIRST, BISTRO und SECOND.

Dazu habe ich noch eine Klasse WAGGON die einen beliebigen Wagen des Zuges repräsentiert und initialisiert. Sowie die Klasse TRAIN die mit einem Konstruktor die Anzahl der FIRST Waggons und die Anzahl der SECOND Waggons erhält und zusammen mit ENGINE und dem BISTRO(zwischen First und Second) zu einem Zug initialisiert.

Zu meinem Problem:

Ich soll eine Methode schreiben public int getNumber() die die aktuelle Wagennummer liefert.

Liefert die aktuelle Wagennummer im Zug. Jeder Wagen erhält eine Wagennummer, die seine Position im aktuellen Zug angibt. Die Nummerierung beginnt immer bei der Lok mit dem Wert 0. Alle folgenden Wagen werden ab 1 aufsteigend nummeriert. Wird ein Zug umgebaut (siehe unten), muss die Wagennummer aktualisiert werden. Falls der Wagen in keinem Zug verplant ist, wird der Wert -1 zurück gegeben.


Nur weiß ich nicht wie ich das Anstellen soll. Kann mir da jemand ein Tipp geben ?
Ich hoffe ich habe mich verständlich ausgedrückt.

Gruß
 
Hast du den Zug als Liste realisiert, oder wie hast du das gemacht?

Falls ja, dann fang einfach vorne (bei der Lok) an zu suchen und hangel dich durch den Zug, bis du entweder den gesuchten Wagen gefunden hast (dann gib die Position aus) oder du das Ende des Zuges erreicht hast (dann gib einen Fehler (z.B. eine -1 oder eine "EndOfTrainException 😀 ) aus )
 
Ich würde den gesamten Zug als
Code:
ArrayList
realisieren, da diese automatisch zählt und man relativ einfach in der Mitte ein Objekt (also einen Waggon) anhängen kann.

Der Code würde in etwa so aussehen (Klasse Train): (ich übergebe den Zug, in welchem der Wagen steht, damit der Wagen herausfinden kann, an welcher Stelle er steht)
Java:
List<Waggon> waggons = new ArrayList<Waggon>();
waggons.add(new Engine(this));
waggons.add(new Bistro(this));
waggons.add(new First(this));
waggons.add(new Second(this ));
// ...

Du kannst dann so einen Wagen anhängen:
Java:
waggons.add(1, new Bistro());
// du hängst einen Waggon an die zweite Stelle (Index 1), also vor den Bistrowagen.

Die Stelle des Wagens kriegst du dann so raus: (die train-Variable musst du dir natürlich merken)
Java:
public int getNumber() {
  List<Waggon> waggons = train.getWaggons();
  return waggons.indexOf(this);
}

Es wäre wahrscheinlich sinnvoller, eine Funktion im
Code:
Train
zu machen, welche dir den Index eines bestimmten Wagens zurückgibt.
 
Ich würde den gesamten Zug als
Code:
ArrayList
realisieren, da diese automatisch zählt und man relativ einfach in der Mitte ein Objekt (also einen Waggon) anhängen kann.

Da ArrayList intern mit einem Array arbeitet, ist ausgerechnet diese List-Implementierung denkbar ungeeignet, falls es häufig zu der von dir genannten Operation kommen sollte. Viel besser wäre beispielsweise eine LinkedList.
 

Neue Themen


Zurück
Oben