Methoden

Lukases2

Aktives Mitglied
Meine Aufgabe ist im Anhang zu finden.

Folgendes habe ich dazu geschrieben:
Java:
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?
 

Anhänge

  • BP Ubungsaufgabe 6.pdf.jpg
    BP Ubungsaufgabe 6.pdf.jpg
    57,8 KB · Aufrufe: 26

arilou

Bekanntes Mitglied
Von welchem Datentyp ist 'vorgaenger' denn?
...
Und von welchem sollte er sein?
...:oops:
 
Zuletzt bearbeitet:

Lukases2

Aktives Mitglied
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:
 
Zuletzt bearbeitet:

Saheeda

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

Lukases2

Aktives Mitglied
So sieht das jetzt bei mir aus:

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

Aktives Mitglied
Meine Rezeption sieht so aus:
Java:
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?
 

Lukases2

Aktives Mitglied
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

Top Contributor
Meinst du hier?
Java:
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?
 
Zuletzt bearbeitet:

Lukases2

Aktives Mitglied
Meinst du sowas?

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

Top Contributor
"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.
 
Zuletzt bearbeitet:

Lukases2

Aktives Mitglied
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

Aktives Mitglied
Ich habe meine Rezeption wie folgt geändert:

Java:
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 ;)
 

Neue Themen


Oben