ich habe ein generelles Verständnis-Problem mit der return-Anweisung.
Ich habe eine Methode geschrieben die Palindrome erkennt. Jetzt geb ich per System.out.print aus, ob es sich um eines handelt oder nicht (Theoretisch könnt ich das auch mit true/false als Rückgabewert tun, aber ich möchte genau diese return-Anweisung mal verstehen)
Meine Frage: Warum muss ich den String am Ende der Methode zurückgeben? Wenn ich zum Beispiel die Methode mit void formuliere schmeisst der mir den Fehler das ein String ein return erwartet.
Wozu also brauche ich den return-Wert, wenn ich doch auch ohne ihn bestimmen kann, dass der String ein Palindrom ist oder eben nicht.
Meine Frage: Warum muss ich den String am Ende der Methode zurückgeben? Wenn ich zum Beispiel die Methode mit void formuliere schmeisst der mir den Fehler das ein String ein return erwartet.
Mhm? Du musst erst einmal gar nichts Du bestimmst ob etwas zurückgegeben werden soll oder nicht. Wenn du allerdings void sagst, muss natürlich die Zeile 13 raus, weil mit return sagst du ja gerade gebe zurück...Und das System.out in Zeile 23 muss dann auch raus, weil was soll System.out denn printen wenn nichts zurückgegeben werden soll?
Deine Methode ist auch nicht optimal, du hast eine Endlosschleife wenn es kein Palindrom ist
Wenn deine eigentliche Frage aber ist, wofür ein return ist, ich denke das steht in wirklich jedem Java-Buch, du musst schon konkret sagen wo da deine Verständnisprobleme sind
Vermutlich willst du eine Methode schreiben, die überprüft, ob ein String ein Palindrom ist oder nicht. Dann solltest du vllt eher boolean zurückgeben.
Hatte vorher auch mit boolean gearbeitet. Mir gehts nur ums Verständnis.
Also durch das System.out.print aus Zeile 23 hatte er trotz Angabe von void noch einen return Wert erwartet. Das ist also geklärt, Danke dafür!
Mein Verständnisproblem ist, wozu ich einen Rückgabewert brauche? Am Beispiel meines Palindroms wird der String der Methode übergeben und somit kann die Methode damit arbeiten, aber wieso muss der anschließend wieder zurückgegeben werden? Wozu brauche ich den, oder welcher Bestandteil meines Programms braucht den?
Gibt es Programmbeispiele, die unbedingt einen return Wert zurückgegeben haben müssen und im Gegensatz dazu Programme die keinen benötigen?
Der Einzige der wissen kann ob da ein return hin soll oder nicht, bist du selber Aber du musst dich einmal dafür entscheiden was die Methode machen soll und dabei bleiben.
Wnen du sagst, die Methode soll von sich aus die Ausgaben auf System.out machen und nichts zurückgeben, dann macht das print in Zeile 23 natürlich keinen Sinn mehr.
Du könntest die Methode aber auch so ändern dass sie einen String "Palindrom" bzw "kein Palindrom" zurückgibt - dann hast du kein print mehr in der Methode, brauchst aber wieder das print in Zeile 23.
Stattdessen wären in dem Fall dann aber booleans der logischere Weg.
Den am Anfang übergebenen String wieder zurückzugeben ist aber unnötig, wie du schon festgestellt hast
Nein, mit der Überprüfung hat das nichts zu tun. Du musst doch wissen, ob du etwas zurückhaben willst oder nicht. Eine Methode, die eine Zahl berechnet könnte sinnvollerweise diese Zahl zurückgeben. Eine Methode, die einfach nur irgendwas auf die Konsole schreibt, braucht nicht unbedingt eine Rückgabe.
Kann ich also davon ausgehen, dass sobald etwas zurückgegeben wird die Methode nicht weiterarbeitet?
nur stellt sich mir immer noch die Frage, warum ich den Wert zurückgebe. Theoretisch könnte ich wenn ich a+b=ergebnis berechne auch ergebnis mit system.out.print auf der konsole ausgeben und sehe den berechneten Wert. Nur wo ist der Unterschied zur return-Anweisung? Der Wert wird und bleibt doch in ergebnis gespeichert. Worauf ich hinaus will ist, dass return und System.out.println für mich dasselbe sind, bis ich eines besseren belehrt wurde
Du hast ein Konto bei einer Bank. Die freundliche Mitarbeiterin sagt dir zwar jedes mal fleißig "sie haben 10000 € auf dem Konto" (System.out.print), aber wenn du das Geld haben willst (return), dann sagt sie: "nö, das geht nicht: nur gucken, nicht anfassen"... Ist eine ziemlich witzlose Bank, meinst du nicht?
Es kommt eben drauf an, was du erreichen willst. Wenn du dein Ergebnis auswerten willst, dann brauchst du ein Ergebnis. Und wenn du einfach nur System.out.println machst, dann kannst du ja damit nichts mehr anstellen. Auch darüber hinaus: return und System.out.println sind völlig unterschiedliche Sachen, die lassen sich in keiner Weise vergleichen. Ließ einfach mal in einem Java-Buch nach, was es mit return auf sich hat.
Die return-Anweisung beendet die Methode und übergibt die Kontrolle an die
aufrufende Methode zurück.
Ist ein Ausdruck angegeben, wird dieser zuerst ausgerechnet und dieser
Wert als Ergebniswert zurückgegeben. Der Ausdruck muss typkompatibel
zum angegebenen Resultattyp der Methodendeklaration sein.
Wird kein Ausdruck angegeben, so muss die Methode als void deklariert
sein oder es muss ein Konstruktor sein.
Solche Erklärungen finde ich, wenn ich danach suche, aber die sind (für mich) nicht ausreichend.
Wenn ich also einen Wert (in meinem Fall an die main-Methode) zurückgebe, dann kann die main-Methode damit weiterarbeiten (ggf. auch weitere Untermethoden)?
Ist das der Sinn und Zweck?
Und wenn ich keinen Wert zurückgebe, dann weiss nur die Methode in der der Wert berechnet wurde, welchen Wert die Variable (In meinem Fall: ergebnis) hat?
Die Erklärung ist doch ok...
Aber ich weiß ehrlich zu sein nicht, wo genau dein Problem liegt. Return gibt etwas zurück, kein return gibt nichts zurück. Willst du was zurückgeben, musst du in der Methodendeklaration den Typ angeben, willst du nichts zurückgeben, musst du void verwenden.
Deine Fragen kann man so ohne weiteres nicht mit Ja/Nein beantworten:
- Wenn du eine Methode mit Rückgabe in der Main ausführst, dann wird da ein Wert zurückgegeben. Was du damit anstellst ist deine Sache.
- Nein, d.h. nur, dass diese Methode nichts zurückgibt. Die kann ja irgendwelche globalen Variablen o.ä. verändern.
In manchen Sprachen heißt eine void-Methode - Prozedur und einie Methode mit Rückgabe - Funktion. Vllt sagen dir die 2 Wörter mehr...
mein Problem ist, dass ich nicht weiß was ich mit einem Rückgabewert anfangen könnte.
Vlt fehlt mir einfach ein praktisches Beispiel, dass mir zeigen würde wenn ich in einer Methode a+b=ergebnis berechne und ergebnis dann zurückgebe, was ich mit ergebnis anfangen kann.
Das Beispiel mit dem Konto ist sehr verständlich. Mit dem Resultat von a+b gibt es nicht mehr viele Möglichkeiten was man damit machen kann, als es zu speichern um damit weiter zu rechnen oder auszugeben.
Hier mal die Geschichte mit dem Konto als einfaches Beispiel.
System.out.println("Geld in der Brieftasche: " + geld);
}
}
[/Java]
[Java]
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
Konto meinKonto = new Konto(200);
Brieftasche meineBrieftasche = new Brieftasche(0);
Ich verstehe das jetzt so, dass die Klasse Konto den Geldbetrag der abgehoben wird mit return an die main methode ZURÜCKGIBT und die main-methode ÜBERGIBT den zurückgegeben Wert an die Klasse Brieftasche.
Ich hatte vorhin mal die Vermutung angestellt, das ein Wert dann zurückgegeben werden sollte (An die main methode z.b.), damit andere Klassen damit arbeiten können. Also wenn ich das Beispiel sehe, dann passiert doch genau das?!?
Ja, wenn ich es erklären müsste, ist der Sinn eines Rückgabewerts, einen Wert zu erhalten um damit weiterarbeiten zu können. Einen Rückgabewert entgegenzunehmen und dann einfach nur auszugeben, dass kann die Methode auch ruhig ohne Rückgabewert machen.
Und wie schreibst du für diese Methode einen Test? Wenn die Methode irgendwas berechnet, dann soll sie auch nur irgendwas berechnen. Ausgabe ist was ganz anderes und man sollte nicht alles in ein Topf schmeißen.
Und wie schreibst du für diese Methode einen Test? Wenn die Methode irgendwas berechnet, dann soll sie auch nur irgendwas berechnen. Ausgabe ist was ganz anderes und man sollte nicht alles in ein Topf schmeißen.
Da geb ich dir Recht. Ich wollte nicht alles in einen Topf schmeissen, bei dem simplen Beispiel mit einer Berechnung von a+b und ich will das Resultat nur ausgeben, spielt es keine Rolle meiner Meinung nach ob ich das Resultat direkt in der Methode ausgeben lasse oder den Rückgabewert ausgebe.