Busfahrt simulieren

Berta

Mitglied
hallo forum,


ich weiß mal wieder nicht so recht, wie ich anfangen soll, kann mir jmd. da helfen?

aufgabe

Implementieren Sie einen erweiterten Konstruktor, der eine Anfangs- und eine Endstation als Zei-
chenkette ü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 Sta-
tionen zurückgelegt).
3. Implementieren Sie die Getter-Methoden:
• getStart,
• getZiel,
• getGefahreneStationen,
welche die Werte der jeweiligen Attribute zurückgeben.

Java:
class Bus


	private String start;
 
	private	String ziel;
 
 	private int gefahreneStationen;
 	
 	
 	public void setstart (String s){
 	
 	s = start;
 	}
 	
 	public String start(){
		return start;
	}
	
	public void setziel (String z){
 	
 	z = ziel;
 	}
 	
 	 	public String ziel(){
		return ziel;
	}
	
	public void setgefahreneStationen (int g){
 	
 	g = gefahreneStationen;
 	}
 	
 	public int gefahreneStationen(){
		return gefahreneStationen;
	}

der will nicht kompilieren... ich versteh auch den sinn von nem konstruktor nicht so, bitte hilfe...
 

Michael...

Top Contributor
der will nicht kompilieren... ich versteh auch den sinn von nem konstruktor nicht so, bitte hilfe...
Zunächst einmal wird der Codebereich einer Klasse ebenfalls mit geschweiften Klammern "eingerahmt":
Java:
class Bus {
...
}
Ein Konstruktor ist eine Art "Initialmethode" einer Klasse. Jede Klasse besitzt ein Konstruktor, soll ein Objekt einer Klasse erzeugt werden, geht das nur über den Aufruf eines Konstruktors. Ausserdem können über den Konstruktor relevante und eventuell auch zwingend notwendige Werte direkt bei der Erzeugung des Objekts mitgeben werden.

Noch ein Hinweis zu Deinem Code:
Java:
public void setstart (String s){
 	s = start;
}
Die Zuweisung ist hier falsch. Richtig:
Java:
public void setStart (String s){
 	start = s;
}
 

Berta

Mitglied
die letzte klammer hatte ich, bloß nicht mit einkopiert

habs auch so gemacht wie du michael, trotzdem ahb ich die fehlermeldung


noname:~/desktop/Bus uwemonnikes$ javac Bus.java
Bus.java:40: cannot find symbol
symbol : constructor Bus()
location: class Bus
Bus b= new Bus();
^
Bus.java:42: cannot find symbol
symbol : variable Steglitz
location: class Bus
Bus b1 = new Bus(Steglitz, Pankow, 0);
^
Bus.java:42: cannot find symbol
symbol : variable Pankow
location: class Bus
Bus b1 = new Bus(Steglitz, Pankow, 0);
^
3 errors
 

xehpuk

Top Contributor
Hey,

wenn du Fehlermeldungen postest, dann doch bitte noch gleich den Quelltext mit dazu. Ansonsten kann man nur raten, was genau das Problem ist. Der Compiler gibt aber auch schon gute Hinweise.

1. Fehlermeldung: Wahrscheinlich hat
Code:
Bus
keinen Konstruktor, der keine Parameter hat. Dieser parameterlose Konstruktor wird auch Default-Konstruktor genannt, denn jede Klasse besitzt ihn, solange man nicht einen anderen definiert. Dies ist hier anscheinend geschehen.

2. und 3. Fehlermeldung: Die beiden Variablen existieren nicht oder befinden sich nicht im Sichtbereich. Vermutlich wolltest du einfach nur String-Literale mitgeben. Der Compiler muss jedoch irgendwie erkennen, dass es sich dabei um eins handelt. Deswegen muss man diese mit Anführungszeichen beginnen und beenden. Du meintest also wohl
Code:
new Bus("Steglitz", "Pankow", 0);
.
 

Berta

Mitglied
Java:
class Bus{

	


	private String start;
 
	private	String ziel;
 
 	private int gefahreneStationen;
 	
 	
 	public void setStart (String s){
 	
 	s = start;
 	}
 	
 	public String start(){
		return start;
	}
	
	public void setZiel (String z){
 	
 	z = ziel;
 	}
 	
 	 	public String ziel(){
		return ziel;
	}
	
	public void setGefahreneStationen (int g){
 	
 	g = gefahreneStationen;
 	}
 	
 	public int gefahreneStationen(){
		return gefahreneStationen;
	}
	
	public Bus( String start, String ziel, int gefahreneStationen){
	
	
	
	
	}
	public Bus(){ 
	
	String start; 
	String ziel;
	int gefahreneStationen;
	}
	
}

ich habs jetzt so gemacht, aber weiter weiß ich nicht mehr
 

Michael...

Top Contributor
Nochmal der Hinweis zur Wertzuweisung einer Variablen.
Links steht die Variable und rechts der zuzuweisende Wert bzw. die Variable mit dem zuzuweisenden Wert.
Code:
a = 4
und nicht
Code:
4 = a

Dann ist die Variablen Deklaration im Defaultkonstruktor überflüssig ( und für Anfänger auch noch gefährlich) wohingegen beim Konstruktor
Code:
Bus(String, String, int)
garnichts mit den Werten gemacht wird. Hier muss natürlich eine Zuweisung an die Instanzvariablen entweder direkt oder durch den Aufruf der entsprechenden Methoden passieren.
 

Berta

Mitglied
Implementieren Sie außerdem die Methode
• fahren,
die als Parameter eine Ganzahl 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.


wie mach ich das, bitte ich weiß es nicht, bittteee
 
M

Marcinek

Gast
Wir können helfen, aber wir stellen Bedingungen.

Da ich das nicht lernen muss, erwarte ich von dir, dass du es vernigstens versuchst und hier nicht rumweinst. :autsch:

Schreibe eine methode fahren .
 
Meine Klasse für „Bus“ sieht so aus:
Java:
public 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(){
	
		return this.start;
		}
		
	public String getziel(){
	
		return this.ziel;
		}
		
	void fahren(int n){
	
		this.gefahreneStationen = n + this.gefahreneStationen;
		}
		
	public int getgefahreneStationen(){
 
		return this.gefahreneStationen;
	}
}
Die Klasse für „BusTest“ sieht so aus:
Java:
public class BusTest{
	public static void main(String[] args){
		
		Bus bus1 = new Bus("Start 1", "Ziel 1");
		bus1.fahren(0);
		bus1.fahren(4);
		
		Bus bus2 = new Bus("Start 2", "Ziel 2");
		bus2.fahren(0);
		bus2.fahren(7);
		
		Bus bus3 = new Bus("Start 3", "Ziel 3");
		bus3.fahren(0);
		bus3.fahren(5);
		
		System.out.println("Start: " + bus1.getstart());
		System.out.println("Ziel: " + bus1.getziel());
		System.out.println();
		System.out.println("Start: " + bus2.getstart());
		System.out.println("Ziel: " + bus2.getziel());
		System.out.println();
		System.out.println("Start: " + bus3.getstart());
		System.out.println("Ziel: " + bus3.getziel());
		
	}
	
	public static void printBus(Bus bus){
		
		
	}	
}
Ich weiß bloß nicht, wie ich bei der Methode „printBus“ die Methode „fahren“ aufrufen soll. Könntet ihr mir helfen? Ich muss diese Informatikhausaufgabe gleich abgeben.
 

Michael...

Top Contributor
Man kann die Methode an der übergebenen Referenz
Code:
bus
aufrufen. Allerdings ist es merkwürdig das fahren mit printen zu tun hat.
 
Meinst du etwa so?:
Java:
public class BusTest{
	public static void main(String[] args){
		
		Bus bus1 = new Bus("Start 1", "Ziel 1");
		bus1.fahren(0);
		bus1.fahren(4);
		
		Bus bus2 = new Bus("Start 2", "Ziel 2");
		bus2.fahren(0);
		bus2.fahren(7);
		
		Bus bus3 = new Bus("Start 3", "Ziel 3");
		bus3.fahren(0);
		bus3.fahren(5);
		
		System.out.println("Start: " + bus1.getstart());
		System.out.println("Ziel: " + bus1.getziel());
		System.out.println();
		System.out.println("Start: " + bus2.getstart());
		System.out.println("Ziel: " + bus2.getziel());
		System.out.println();
		System.out.println("Start: " + bus3.getstart());
		System.out.println("Ziel: " + bus3.getziel());
		
	}
	
	public static void printBus(Bus bus){
		
		System.out.println(bus.bus1.fahren());
		
	}	
}
 

Michael...

Top Contributor
Ah, wird ein Ratespiel ;-)

Der Methode wird ein Objekt bzw. eine Referenz auf ein Objekt vom Typ Bus übergeben. Was soll jetzt bus1 sein? Die Klasse Bus besitzt keine öffentliche Instanzvariable namens bus1 (braucht sie auch nicht). Abgesehen davon, dass die Methode printBus(...) nirgends aufgerufen wird, ist mir nicht ganz klar was darin passieren soll. Ich hätte die Methode jetzt eher als Instanzmethode in der Klasse Bus vermutet...
 

Neue Themen


Oben