# Methoden



## Lukases2 (3. Dez 2014)

Meine Aufgabe ist im Anhang zu finden. 

Folgendes habe ich dazu geschrieben:

```
package bppack;

public class Patient {
	
	public String name;
	public String vorgaenger;
	
	public void setName(String n){
		name = n;
	}
	
	public String getName(){
		return name;
	}
	
	public void setVorgaenger(String p){
		vorgaenger = p;
	}
	
	public String toString(){
		String ausgabe = name;
		if(vorgaenger != null)
			ausgabe = ausgabe + " ist nach " + vorgaenger.getName() + " dran. "+ vorgaenger;
		else
			ausgabe += " ist als erstes dran.";
		return ausgabe;
	}
}
```

In Zeile 24 bekomme ich den Fehler: The method getName is undefined for the type String. 
Was mache ich falsch?


----------



## Gucky (3. Dez 2014)

Übersetz doch mal die Nachricht ins Deutsche.


----------



## arilou (3. Dez 2014)

Von welchem Datentyp ist 'vorgaenger' denn?
...
Und von welchem sollte er sein?
...


----------



## Lukases2 (3. Dez 2014)

hmm ...ich glaube ich habe nicht ganz verstanden, was "vorgaenger : Patient" in der UML heißt.
Zum Beispiel bei "name : String" steht der Datentyp ja drin, "Patient ist aber irgendwie nicht wirklich ein Datentyp. Obwohl String ja auch nichts anderes als Patient ist, nur schon vorher definiert. Komme ich so weiter? :bahnhof:


----------



## Saheeda (3. Dez 2014)

Du brauchst ein Objekt vom Typ Patient namens vorgaenger.
Doch, Patient ist ein Typ, nur halt kein vordefinierter. Du brauchst also eine entsprechende Klasse.


----------



## Joose (3. Dez 2014)

Lukases2 hat gesagt.:


> "Patient ist aber irgendwie nicht wirklich ein Datentyp.



Doch durch die Erstellung von Klassen ist es dem Programmierer möglich eigene Datentypen zu erstellen.
Und diese Datentypen kapseln halt andere Daten.


----------



## Lukases2 (3. Dez 2014)

So sieht das jetzt bei mir aus:


```
package bppack;

public class Patient {
	
	public String name;
	public Patient vorgaenger;
	
	public void setName(String n){
		name = n;
	}
	
	public String getName(){
		return name;
	}
	
	public void setVorgaenger(Patient p){
		vorgaenger = p;
	}
	
	public String toString(){
		String ausgabe = name;
		if(vorgaenger != null)
			ausgabe = ausgabe + " ist nach " + vorgaenger.getName() + " dran. "+ vorgaenger;
		else
			ausgabe += " ist als erstes dran.";
		return ausgabe;
	}
}
```

und ich bekomme auch keine Fehlermeldung mehr. Fehlt noch die Ausgabe mit toString. Da muss ich gerade nochmal googlen, haben wir noch gar nicht gemacht.


----------



## Lukases2 (3. Dez 2014)

Meine Rezeption sieht so aus:

```
package bppack;

public class Rezeption {
	public static void main(String[] args){
		
		Patient p1 = new Patient();
		p1.setName("Nor");
		
		Patient p2 = new Patient();
		p2.setName("Bert");
		
		Patient p3 = new Patient();
		p3.setName("Det");
		
		System.out.println(p2.toString());
	}
}
```

Nächstes Problem: Ich bekomme immer nur die Meldung, der gewählte Patient käme als erstes dran. Warum?


----------



## Saheeda (3. Dez 2014)

Wie / wo sagst du, in welcher Reihenfolge die Patienten drankommen?


----------



## Lukases2 (3. Dez 2014)

Ich dachte in Zeile 23. 
Kann mir jemand einen Tipp geben, wie ich das noch implementierten kann? Ist Jhd auch schließlich die Aufgabe.


----------



## Saheeda (3. Dez 2014)

Meinst du hier?

```
public String toString(){
		String ausgabe = name;
		if(vorgaenger != null)
			ausgabe = ausgabe + " ist nach " + vorgaenger.getName() + " dran. "+ vorgaenger;
		else
			ausgabe += " ist als erstes dran.";
		return ausgabe;
	}
```

Das ist nur eine Abfrage, aber keine Deklaration.


Ruf in der main auf jedem Patienten die Methode "setVorgaenger" auf.
Hast du den Code selbst geschrieben oder irgendwo rauskopiert? Verstehst du, was du da überhaupt in den Klassen stehen hast?


----------



## Lukases2 (3. Dez 2014)

Der ist selber geschrieben, aber ganz sicher mit der Nutzung bin ich mir noch nicht. Ich versuche das gleich mal umzusetzen.


----------



## Lukases2 (3. Dez 2014)

Meinst du sowas?


```
package bppack;

public class Rezeption {
	public static void main(String[] args){
		
		Patient p1 = new Patient();
		p1.setVorgaenger(p1);
		p1.setName("Nor");
		
		Patient p2 = new Patient();
		p2.setVorgaenger(p2);
		p2.setName("Bert");
		
		Patient p3 = new Patient();
		p3.setVorgaenger(p3);
		p3.setName("Det");
		
		System.out.println(p2.toString());
	}
}
```

Funktioniert leider nicht


----------



## Saheeda (3. Dez 2014)

"Funktioniert nicht" ist keine Fehlerbeschreibung.
Was funktioniert nicht?
Welche Fehlermeldung kommt? Und was heißt die auf deutsch übersetzt?
(Hinweis: bei jedem Fehler steht auch ne Zeilennummer mit dabei!)

Schau dir nochmal ganz genau die setVorgaenger-Funktion in der Patientenklasse an und überlege, was die eigentlich macht.

EDIT: Benutzt du Eclipse? Dann kannst du links neben den Zeilennummern Breakpoints setzen und das Programm im Debug-Modus starten. Im Debugger ist Rechts oben ein Fenster, welches dir alle Variablen mit ihren Werten anzeigt. Schau dir mal ganz genau an, was eigentlich passiert.


----------



## Lukases2 (3. Dez 2014)

Diese Fehlermeldung kommt:

Exception in thread "main" java.lang.StackOverflowError
	at java.lang.AbstractStringBuilder.append(Unknown Source)
	at java.lang.StringBuilder.append(Unknown Source)
	at java.lang.StringBuilder.<init>(Unknown Source)
	at bppack.Patient.toString(Patient.java:23)
.... 

Ich benutze Eclipse, aber im Code selber habe ich keinen Fehler, eben nur, wenn ich das Programm starte. 
Ich schaue mir das morgen nochmal an, muss ja schon bald wieder aufstehen ^^.


----------



## Lukases2 (4. Dez 2014)

Ich habe meine Rezeption wie folgt geändert:


```
package bppack;

public class Rezeption {
	public static void main(String[] args){
		
		Patient p1 = new Patient();
		p1.setName("Nor");
		
		Patient p2 = new Patient();
		p2.setVorgaenger(p1);
		p2.setName("Bert");
		
		Patient p3 = new Patient();
		p3.setVorgaenger(p2);
		p3.setName("Det");
		
		System.out.println(p3.toString());
	}
}
```

setVorgaenger() hat die Funktion, den Vorgaenger festzusetzen. Klar, dass ein Patient nicht sein eigener Voränger sein kann. 
Damit funktioniert das Programm dann auch. Danke für deine Hilfe


----------

