# Busfahrt simulieren



## Berta (11. Dez 2011)

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.


```
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... (11. Dez 2011)

Berta hat gesagt.:


> 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":

```
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:


Berta hat gesagt.:


> ```
> public void setstart (String s){
> s = start;
> }
> ```


Die Zuweisung ist hier falsch. Richtig:

```
public void setStart (String s){
 	start = s;
}
```


----------



## Berta (12. Dez 2011)

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 (12. Dez 2011)

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 
	
	
	
	





```
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 
	
	
	
	





```
new Bus("Steglitz", "Pankow", 0);
```
.


----------



## Berta (12. Dez 2011)

```
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... (12. Dez 2011)

Nochmal der Hinweis zur Wertzuweisung einer Variablen.
Links steht die Variable und rechts der zuzuweisende Wert bzw. die Variable mit dem zuzuweisenden Wert. 
	
	
	
	





```
a = 4
```
 und nicht 
	
	
	
	





```
4 = a
```

Dann ist die Variablen Deklaration im Defaultkonstruktor überflüssig ( und für Anfänger auch noch gefährlich) wohingegen beim Konstruktor 
	
	
	
	





```
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.


----------



## Final_Striker (12. Dez 2011)

Strings schreibt man in Anführungszeichen


```
Bus b1 = new Bus("Steglitz", "Pankow", 0);
```


----------



## Berta (12. Dez 2011)

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


----------



## Marcinek (12. Dez 2011)

Schon mal ein Javabuch dazu befragt?:rtfm:


----------



## Berta (12. Dez 2011)

ja, ich gucke und gucke und verstehs nicht, naja, wenn ihr mir nicht helfen könnt, egal...


----------



## Marcinek (12. Dez 2011)

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 .


----------



## Berta (12. Dez 2011)

hab ich schon, ohne eure hilfe.. ihr sagt mir nie was, voll doof


----------



## Y2Jerichoholic (13. Dez 2011)

Meine Klasse für „Bus“ sieht so aus:

```
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:

```
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... (13. Dez 2011)

Man kann die Methode an der übergebenen Referenz 
	
	
	
	





```
bus
```
 aufrufen. Allerdings ist es merkwürdig das fahren mit printen zu tun hat.


----------



## Y2Jerichoholic (13. Dez 2011)

Meinst du etwa so?:

```
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... (13. Dez 2011)

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...


----------

