public class Train { //Instanzvariablen private Locomotive l; //private Car carry; private int carCount; //Konstruktor Train (Locomotive l){ this.l = l; this.carCount = 0; } //Methoden public void add (Car newCar){ //New Car zeigt auf ursprüngliches firstCar newCar.setNextCar(l.getFirst()); //First Variable von Locomotive l zeigt auf newCar l.setFirst(newCar); carCount++; } public String print(){ Car current = l.getFirst(); int len = l.getSize(); int passos = 0; while (current != null){ len += current.getSize(); passos += current.getPassengers(); current = current.getNextCar(); } return "Die Lokomotive ist von Typ " + l.getType() + " und ist " + l.getSize() + "m groß. Sie hat " + carCount + " Wagen angehaengt, und ist mit diesen " + len + "m lang. Mit diesem Zug fahren gerade " + passos + " Personen und Personinnen."; } public int getPassengers(){ Car current = l.getFirst(); int passos = 0; while (current != null){ passos = passos + current.getPassengers(); current = current.getNextCar(); } System.out.println("Anzahl Personen: "); return passos; } public int getLength(){ Car current = l.getFirst(); int length = l.getSize(); while (current != null){ length += current.getSize(); current = current.getNextCar(); } System.out.println("Länge des Zugs: "); return length; } public Car removeFirst(){ Car first = l.getFirst(); if (first == null){ return null; } Car second = first.getNextCar(); //Zweiter Wagen wird deklariert l.setFirst(second); // Lok zeigt auf zweiten Wagen first.setNextCar(null); //Verweis auf abgehängten Wagen entfernen carCount--; return first; } public void relink(Train other){ Car theirFirst = other.l.getFirst(); //Wagenkette other //Zug other hat keine Wagen if (other.l.getFirst() == null) {return;} Car ourFirst = this.l.getFirst(); if (ourFirst == null){ //WIr haben keine Wagen, also übernehmen this.l.setFirst(theirFirst); this.carCount = other.carCount; } else { //Laufvariable zum Zählen der Wagons Car current = ourFirst; //Solange ein nächster Wagon existiert while (current.getNextCar() != null) { current = current.getNextCar(); } current.setNextCar(theirFirst); this.carCount += other.carCount; other.carCount = 0; } // Anderen Zug leeren other.l.setFirst(null); } public void revert(){ //vorheriger Wagen Car prev = null; //aktueller Wagen Car current = l.getFirst(); //Tauschreferenz Car next; while (current != null){ next = current.getNextCar(); //Nachfolger merken current.setNextCar(prev); //Zeiger umdrehen prev = current; current = next; } l.setFirst(prev); //neuer Anfang } }