publicStringtoString(){for(int i =1; i <=getAnzahlDiamanten(); i++){
d +="D";}for(int i =1; i <=getAnzahlRubine(); i++){
r +="R";}for(int i =1; i <=getAnzahlSmaragde(); i++){
s +="S";}return"("+ d + r + s +")";}
So, in einem Objekt liegen z.B. 2 Diamanten, 3 Rubine und 4 Smaragde. Jetzt sollen die Edelsteine wie folgt ausgegeben werden:
Java:
(DDRRRSSSS)
aber die Ausgabe ist immer folgende:
Java:
(nullDDnullRRRnullSSSS)
In derselben Klasse, aber nicht in der toString-Methode habe ich folgende Variablen deklariert und initialisiert:
Java:
privateString d =null;privateString r =null;privateString s =null;
Ich weiß nicht warum immer vor der Variablen null ausgegeben wird.
Das ging mir auch schon durch den Kopf. Klar das bei
Java:
System.out.println(null+"D");
die Ausgabe
Java:
nullD
ist.
Nur komme ich nicht darauf, den Fehler zu beheben. Die String-Variablen nicht zu initialisieren bringt natürlich nichts, da der Compiler die Variablen doch selbstständig mit null initialisiert. Die for-Schleifen sollten so bleiben, damit ich soviele "R" ausgegeben bekomme, wie Rubine auch vorhanden sind.
Ja klar, so einfach eigentlich. Vielen Dank!
Das eigentliche Problem hat sich somit erledigt, mich würde nur interessieren ob der Code so ok ist oder ist es unschön extra Objektvariablen (String d usw.) anzulegen?!
Ja, ich würde die Instanzvariablen d r und s rausschmeißen, die brauchst du ja nur in der toString Methode.
Machs doch z.b. so:
Java:
publicStringtoString(){String s ="(";for(int i =1; i <=getAnzahlDiamanten(); i++){
s +="D";}for(int i =1; i <=getAnzahlRubine(); i++){
s +="R";}for(int i =1; i <=getAnzahlSmaragde(); i++){
s +="S";}
s +=")";return s;}
Das ganze kann man dann mit nem StringBuilder noch etwas schöner lösen.
Ich hätte da doch noch einmal eine Frage. Wenn ich meine Version der toString-Methode benutze und im Verlauf die Diamanten, Rubine und Smaragde alle auf 0 setze, die Truhe somit leer ist, dann bekomme ich aber immer noch die Ausgabe von vorher. Folgend das Problem ganz konkret:
Java:
Diamanten im Schatzkaestchen:2Rubine im Schatzkaestchen:3Smaragde im Schatzkaestchen:4(DDRRRSSSS)Diamanten im Schatzkaestchen:0Rubine im Schatzkaestchen:0Smaragde im Schatzkaestchen:0(DDRRRSSSS)
Wundert mich, mit der Methode von EikeB tritt das Problem nicht auf. Ich habe auch beim erneuten Aufruf meiner info-Methode (die das Objekt zurückgibt) folgende Zeile mal explizit mit angegeben:
Java:
System.out.println(chest.ausgeben().toString());
, dies ändert aber nichts. Wo liegt das Problem und wann wird die toString-Methode immer aufgerufen? Wenn das Objekt an den Caller zurückgegeben wird?
Ok, dann bräuchte ich die Instanzvariablen in meiner Methoden leeren() nur wieder mit einem leeren String initialisieren. Das hin und her spricht nun ganz klar für deine Methode
Danke