Busfahrt

Status
Nicht offen für weitere Antworten.

schnosi

Mitglied
Hey Leute,

brauche bei einer Aufgabe bitte mal eure Hilfe, da ich nicht weiterkomme. Unser Tutor hat es einfach nicht drauf und kann einfach nicht gut erklären, deswegen komme ich hier einfach nicht weiter.

Wir haben folgende Aufgabe:
"Es sollen Busse und Testfahrten simuliert werden.

---> Erstelle eine Klasse Bus:
ein Bus beinhaltet in unserem Fall die Anfangs- und Endstation des Busses und die Anzahl der zurückgelegten Stationen.
1. Erstellen Sie eine Klasse Bus und deklarieren Sie folgende Attribute:
- start -> Anfangsstation des Busses als Zeichenkette
- ziel -> Endstation des Busses als Zeichenkette
- gefahreneStationen - Anzahl der zurückgelegten Stationen als Ganzzahl
Überlegen Sie sich dafür sinnvolle Typen, weiterhin sollen alle Attribute von außen vorerst nicht veränderbar sein, setzen Sie ihre Sichtbarkeit also entsprechend.
2. Implementieren Sie einen Konstruktor, der eine Anfangs- und Enstation als Zeichenkette übergeben bekommt und die Attribute start und ziel initialisiert, gefahreneStationen soll auf 0 gesetzt werden (wenn ein neues Bus-Objekt erzeugt wird, hat der Bus noch keine Stationen zurückgelegt).
3. Implementieren Sie die Getter-Methoden
-getStart
-getZiel
-getGefahreneStationen
welche die Werte der jeweiligen Attribute zurückgeben
4. Implementieren Sie außerdem die Methode
- fahren,
die als Parameter eine Ganzzahl n übergeben bekommt und den Bus n Stationen fahren lässt, d.h. gefahreneStationen entsprechend erhöht.
Alle Methoden sollen von außen sichtbar sein.

--> Erstelle eine Klasse BusTest:
1. Erstellen Sie eine Klasse BusTest und implementieren Sie die statistische Methode
- public static void printBus(Bus bus),
die den Startpunkt, die Endstation und die Anzahl der zurcükgelegten Stationen des übergebenen Busses auf der Konsole ausgibt.
2. Erstellen Sie drei Objekte vom Typ Bus mit unterschiedlichen Anfangs- und Endstationen
3. Lassen Sie alle drei Busse einige Stationen fahren
4. Geben Sie die Dateien aller drei Busse auf der Konsole aus, indem Sie die gerade implementiere Methode printBus verwenden.



So meine Klasse Bus sieht bisher so aus:

Java:
class Bus {

	private String start;

	private String ziel;

	private int gefahreneStationen;
	private Bus[] bus;


	public Bus(String start, String ziel, int gefahreneStationen){

			this.start=start;

			this.ziel=ziel;

			this.gefahreneStationen=0;

		}

	public String getStart(String start){

		return start;

	}

	public String getZiel(String ziel){

		return ziel;

	}

	public int fahren(int n){

			for(int i=0;i<=n;i++){

			this.gefahreneStationen+=n;

			} return this.gefahreneStationen;

	}

	public int getGefahreneStationen(int n){

		gefahreneStationen = fahren (n);
		return gefahreneStationen;

		} 

}


und meine Klasse BusTest bisher so:

Java:
public class BusTest{

	public static void main (String [] args){

		Bus[] bus1 = new Bus[3];
		bus1[0] = new Bus("Bombay", "Delhi", 10);
		bus1[1] = new Bus("Wunderland", "Nimmerland", 3);
		bus1[2] = new Bus("Moskau", "Stalingrad", 7);

	}

	public static void printBus(Bus bus){

		String output = "Es gibt : "+ bus.length+" Busse. Folgende Busse sind enthalten : \n";	

	}

}

... wo liegen meine Denkfehler? Was fehlt? Wie sollte es aussehen?

Könnt ihr mir bitte helfen. Ich wäre euch sooo verbunden.
Lieben Dank schon mal.

Grüße,
schnosi
 
Zuletzt bearbeitet:

Lexi

Bekanntes Mitglied
Zunächst wäre wir dir sehr verbunden, wenn du deinen Code in JAVA Tags einbindest, das macht das ganze weitaus leserlicher ;)

Was bringt dir ein Array von Bussen als Attribut deiner Bus-Klasse ? Hat ein Bus eine Reihe anderer Busse ? Macht das Sinn ?
Java:
public int getGefahreneStationen(int n){

gefahreneStationen = fahren (n);
return gefahreneStationen;

}

Ich gehe mal stark davon aus, dass diese Methode einfach ein stinknormaler Getter sein soll. D.h. sie ist dafür da den Wert von "gefahreneStationen" zurückzugeben und das ohne ihn vorher zu ändern. Wenn du von deinem Bus später wissen möchtest wie viele Stationen er bisher zurückgelegt hat, möchtest du ihm doch nicht erst eine Anzahl Stationen nennen, die er dann zurücklegt, bevor er dir dann den geforderten Wert zurück gibt. Überlege nochmal, ob es an dieser Stelle Sinn macht den Bus fahren zu lassen.
 

Final_Striker

Top Contributor
Java:
public static void printBus(Bus bus){

String output = "Es gibt : "+ bus.length+" Busse. Folgende Busse sind enthalten : \n";

}

diese methode soll die daten von nur einem bus, der als parameter übergeben wird, ausgeben.
 

schnosi

Mitglied
Was bringt dir ein Array von Bussen als Attribut deiner Bus-Klasse ? Hat ein Bus eine Reihe anderer Busse ? Macht das Sinn ?

Nein ein Bus hat keine Reihe anderer Busse, aber ich muss doch 3 Objekte (Busse) mit Anfangs- und Endstation initialisieren und deswegen lege ich da ein Array an. Da sehe ich jetzt echt keinen Fehler drin... mhh erklär mir bitte mal, was du machen würdest und warum das besser wäre?!

dann zu deiner zweiten Frage.... ja da sehe ich vollkommen ein, dass das falsch ist. aber um ihm nicht sagen zu müssen, wie viel stationen er fahren muss, müsste ich doch für die jeweiligen start- und endstationen sagen, wie viel stationen dafür bräuchten...richtig?
wie mache ich das?

____

Java:
public static void printBus(Bus bus){

String output = "Es gibt : "+ bus.length+" Busse. Folgende Busse sind enthalten : \n";

}

diese methode soll die daten von nur einem bus, der als parameter übergeben wird, ausgeben.

der code ist an dieser stelle noch nicht komplett ;) da fehlt noch einiges...
 

Wookie81

Aktives Mitglied
Hallo!

Du hast ein paar Fehler in deinem Code:
  • Die Klasse Bus muss sich selbst nicht als Liste enthalten. Eine Liste mit Busse verwendest du ja dann in der main Methode.
  • Der Konstrukor braucht den Parameter gefahreneStationen nicht, da der ja eh auf 0 gesetzt werden soll
  • Getter brauchen (hier) gar keinen Parameter
  • Die Schleife in fahren macht keinen Sinn. Entweder du machst eine Schleife über n und erhöhst dabei gefahreneStationen immer um 1 oder du addierst einfach n zu gefahrenStationen. (Übrigens wird deine Schleife n+1 durchlaufen!)
  • Der Getter von gefahreneStationen soll nicht erst den Bus fahren lassen und dann die Stationen zurückgeben sondern nur die Stationen zurückgeben.
  • Das Array bus1 ist schlecht benannt, da sind schließlich alle Busse drinnen.
  • printBus soll immer für einen Bus ausgeben welche Start-/Endstation er hat und wieviele Stationen er zurückgelegt hat. Dazu verwendest du einfach die Getter und gibst halt den entsprechenden Text aus .. und du musst die Funktion halt einmal für jeden Bus aufrufen!
  • Außerdem sollst du die Busse fahren lassen, bevor du die Infos per printBus ausgibst.

Wk
 

Wookie81

Aktives Mitglied
dann zu deiner zweiten Frage.... ja da sehe ich vollkommen ein, dass das falsch ist. aber um ihm nicht sagen zu müssen, wie viel stationen er fahren muss, müsste ich doch für die jeweiligen start- und endstationen sagen, wie viel stationen dafür bräuchten...richtig?
wie mache ich das?

Nein. Die Klasse Bus soll gar nicht so kompliziert aufgebaut sein, sondern einfach nur die Informationen zu Start- und Endstation enthalten und mitzählen wieviele Stationen gefahren wurden. Die Information wie weit es von Start nach Ziel ist, ob er angekommen ist etc etc müssen alle nicht enthalten sein.

Wk
 

schnosi

Mitglied
Nein. Die Klasse Bus soll gar nicht so kompliziert aufgebaut sein, sondern einfach nur die Informationen zu Start- und Endstation enthalten und mitzählen wieviele Stationen gefahren wurden. Die Information wie weit es von Start nach Ziel ist, ob er angekommen ist etc etc müssen alle nicht enthalten sein.

Wk

Aber es muss doch eine gewisse Anzahl gefahrener Stationen geben und die muss doch dann in der Information für den jeweiligen Bus enthalten sein...?!
 

Lexi

Bekanntes Mitglied
Die Anzahl gibt es auch ;) Sie ist nämlich im Attribut "gefahreneStationen" der Klasse Bus gespeichert.
Wenn du später deinen Bus testest, machst du dir ein neues Bus Objekt und rufst da drauf dann deine fahren(int n) Methode auf. Das ebengenannte Attribut "gefahreneStationen" wird dann um n ( also um den Wert den du als Parameter übergeben hast) erhöht.
 

schnosi

Mitglied
ist denn die Klasse Bus nun so richtig?! :

Java:
class Bus {

	private String start;

	private String ziel;

	private int gefahreneStationen;



	public Bus(String start, String ziel){

		this.start=start;

		this.ziel=ziel;

		this.gefahreneStationen=0;

		}

	public String getstart(String start){

		return start;

	}

	public String getziel(String ziel){

		return ziel;

	}

	public int fahren(int n){

			for(int i=0;i<=n;i++){

			this.gefahreneStationen++;

			} return this.gefahreneStationen;

	}

	public int getgefahreneStationen(int gefahreneStationen){

		return this.gefahreneStationen;

		} 

}
 

schnosi

Mitglied
bitte helft mir.... sitze hier seit stunden und es kommt nichts gutes raus :( bin am verzweifeln....
ab nächster woche gehe ich zu einem anderen tutor... jeder andere ist besser als mein bisheriger
 

Lexi

Bekanntes Mitglied
Wir haben dir doch schon gesagt, dass die Getter Methode
Java:
getGefahreneStationen()
KEINEN Parameter erwartet ;) Wozu denn auch ? Wenn du diese Methode aufrufst willst du von dem Bus auf dem du sie aufruft doch nur wissen wie viele Stationen er bereits zurückgelegt hat, d.h. diese Methode gibt einfach nur den Wert von "gefahreneStationen" zurück ;)

Zu der fahren(int n) Methode:

Im Prinzip ist die for Schleife ziemlich überflüssig. Es geht zwar auch so wie du das gelöst hast allerdings wäre doch ein simples addieren schöner, wie ich finde;)

Warum gibt bei dir die Methode fahren(int n) die gefahrenenStationen nochmal an den Aufrufer zurück ? Ich finde das macht wenig Sinn, denn ich als Aufrufer kann doch schon mit getGefahreneStationen() den Wert von "gefahreneStationen" abrufen.

So würde ich die Sache implementieren:
Java:
public void fahren(int n){
    gefahreneStationen += n;
}
 

Wookie81

Aktives Mitglied
bitte helft mir.... sitze hier seit stunden [...]

So ists richtig! ;)

Java:
class Bus {

	private String start;

	private String ziel;

	private int gefahreneStationen;



	public Bus(String start, String ziel){

		this.start=start;

		this.ziel=ziel;

		this.gefahreneStationen=0;

		}

	public String getStart(){ // Keine Parameter sonst ...

		return start; // ... hättest du hier den Parameter zurückgegeben.

	}

	public String getZiel(){ // dito

		return ziel;

	}

	public int fahren(int n){

			for(int i=0;i<n;i++){ // Die Schleife muss von 0 bis n - 1 gehen oder ...

			this.gefahreneStationen++;

			}

		// ... du schreibst es einfach so: this.gefahreneStationen+=n;

/* Lexi hat recht diese Rückgabe kann (muss aber nicht unbedingt) raus.
Statt public int fahren(int n) muss es dann public void fahren(int n) heißen */
		return this.gefahreneStationen; 

	}

	public int getgefahreneStationen(){

		return this.gefahreneStationen;

		} 

}

Sonst alles korrekt. Mit dem Aufruf und der Ausgabe klappt alles?

Wk
 
Status
Nicht offen für weitere Antworten.

Oben