return-Anweisung am Beispiel eines Palindroms

Katzenstreik

Mitglied
Hallo zusammen,

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.

Hier einmal mein Code
Java:
	public static String pal(String palindrom){
		
		int j = 0;
		int i=palindrom.length()-1;
		while ( i >j){
			if (palindrom.charAt(j)!= palindrom.charAt(i)){
				System.out.println ("Nein");}	
			else {
				i--;
				j++;}
		}
		System.out.println ("Ja!!!!");	
		return palindrom;
}
	
	
    public static void main(String [] args)
    {

     
       String palindrom = "otto";

       System.out.print (pal(palindrom));
      
    }

}

Danke für Eure Antworten!
 

eRaaaa

Top Contributor
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
 

XHelp

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

Katzenstreik

Mitglied
stimmt, eine Endlosschleife...

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?
 

Illuvatar

Top Contributor
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 :)
 

Katzenstreik

Mitglied
heisst das so viel wie, wenn ich will dass er mir einen Wert zurückgeben soll, dass ich damit überprüfen kann, ob mein Code funktioniert?

Um der Endlosschleife entgegenzuwirken habe ich hinter Zeile 7 folgendes eingefügt:
Java:
return palindrom;

Nun läuft sie nicht mehr endlos. Kann ich also davon ausgehen, dass sobald etwas zurückgegeben wird die Methode nicht weiterarbeitet?

Danke für eure Geduld :)
 

XHelp

Top Contributor
heisst das so viel wie, wenn ich will dass er mir einen Wert zurückgeben soll, dass ich damit überprüfen kann, ob mein Code funktioniert?
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?
Im Grunde kannst du es fürs erste so hinnehmen. Da gibt es zwar noch eine Sache mit den finally-Block, ist aber am Anfang eigentlich irrelevant.
 

Katzenstreik

Mitglied
ok, langsam schepperts

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

XHelp

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

Katzenstreik

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

XHelp

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

Katzenstreik

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

Hast du so ein Beispiel auf die schnelle?

Danke nochmals!
 
T

tommysenf

Gast
Java:
int quadrat(int x) {
  return x*x;
}

public static void main(String[] args) {

    int quadrat1 = quadrat(2);
    int quadrat2 = quadrat(4);

    System.out.println(quadrat1 + quadrat2);

}
 

Davide

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

[Java]
public class Konto {

private double bestand;

public Konto(double bestand) {

this.bestand = bestand;
}

public void setGeld(double amountOfMoney) {

bestand += amountOfMoney;
}

public double getGeld(double amountOfMoney) {

bestand -= amountOfMoney;

return amountOfMoney;
}

public void printKontoInfo() {

System.out.println("Aktueller Kontobestand: " + bestand);
}
}
[/Java]

[Java]
public class Brieftasche {

private double geld;

public Brieftasche(double geld) {

this.geld = geld;
}

public void setGeld(double amountOfMoney) {

geld += amountOfMoney;
}

public double getGeld(double amountOfMoney) {

geld -= amountOfMoney;

return amountOfMoney;
}

public void printInfoBrieftasche() {

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

meinKonto.printKontoInfo();
meineBrieftasche.printInfoBrieftasche();

double abgehobenesGeld = meinKonto.getGeld(100);
meineBrieftasche.setGeld(abgehobenesGeld);

meinKonto.printKontoInfo();
meineBrieftasche.printInfoBrieftasche();
}

}
[/Java]
 
Zuletzt bearbeitet:

Katzenstreik

Mitglied
danke für das gute Beispiel.

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?!?
 

Davide

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

XHelp

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

Davide

Mitglied
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. :)
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Return-Anweisung Java Basics - Anfänger-Themen 2
W return-Anweisung gibt nichts aus Java Basics - Anfänger-Themen 5
S Methoden Return Anweisung beendet Methode nicht, stattdessen wird diese zweimal durchlaufen Java Basics - Anfänger-Themen 3
S probleme mit der return anweisung Java Basics - Anfänger-Themen 20
R Return Anweisung übergibt Variablen nicht Java Basics - Anfänger-Themen 4
B problem mit der return anweisung Java Basics - Anfänger-Themen 11
T Schleife mit return Anweisung Java Basics - Anfänger-Themen 3
B fehlende return anweisung? Java Basics - Anfänger-Themen 17
A Return Anweisung von Methoden Java Basics - Anfänger-Themen 15
G Return-Anweisung Feldausgabe Java Basics - Anfänger-Themen 6
F return Befehl in einer if-Anweisung Java Basics - Anfänger-Themen 4
R return-Anweisung unnötig?! Java Basics - Anfänger-Themen 2
MiMa Java Doc mehrere Return Parameter Java Basics - Anfänger-Themen 11
A Return in While Schleife Java Basics - Anfänger-Themen 6
J Rekursive Funktion und return statement Java Basics - Anfänger-Themen 3
SUPERTJB return Problem Java Basics - Anfänger-Themen 3
M Warum return die Methode den Wert nicht Java Basics - Anfänger-Themen 5
S Methoden Return Rückgabewert wird nicht übergeben Java Basics - Anfänger-Themen 8
schredder Strings und reguläre Ausdrücke - Methode mit return string.matches Java Basics - Anfänger-Themen 5
I Return Array Java Basics - Anfänger-Themen 4
Q return Ausgabe Java Basics - Anfänger-Themen 4
javapingu Variablenwerte ändern ohne return Statement? Java Basics - Anfänger-Themen 7
C Ausgabe boolean return ((n==9)||(n==0)); Java Basics - Anfänger-Themen 13
G return 1 + methode Java Basics - Anfänger-Themen 4
H Methode mit Array als Rückgabe This method must return a result of Type int[] Java Basics - Anfänger-Themen 2
JD_1998 Hilfsmethode if return funktioniert nicht Java Basics - Anfänger-Themen 2
J Missing Return Statement Java Basics - Anfänger-Themen 11
T Return einer anderen Methode herausfinden Java Basics - Anfänger-Themen 9
C ArrayList mit return zurückgeben Java Basics - Anfänger-Themen 13
M kann man return in nur einer Methode einsetzen? Java Basics - Anfänger-Themen 7
V return String[] führt zu [Ljava.lang.String;@50675690 Java Basics - Anfänger-Themen 7
K Return in Schleife Java Basics - Anfänger-Themen 4
B Statische Methode return funktioniert nicht. Java Basics - Anfänger-Themen 19
S Missing return Java Basics - Anfänger-Themen 4
das_leon return message Java Basics - Anfänger-Themen 2
C return kann nicht auf variable zugreifen Java Basics - Anfänger-Themen 26
N Ausführung gibt keinen Fehler an, Return wird aber nicht ausgegeben Java Basics - Anfänger-Themen 22
R return: cannot find symbol Java Basics - Anfänger-Themen 2
R Ratespiel mit Return und einer Eingabe Java Basics - Anfänger-Themen 1
Z Return in While-Schleife Java Basics - Anfänger-Themen 7
N Frage zu this, super und return Java Basics - Anfänger-Themen 13
K ArrayList ausgeben mit return Java Basics - Anfänger-Themen 6
M Return statement Java Basics - Anfänger-Themen 4
J-Gallus Ein Getter bekommt eine anderen Type als er Return soll Java Basics - Anfänger-Themen 9
J Variablen Komsiche System.in.read() return-value? Java Basics - Anfänger-Themen 3
M Abbrechen Methode ohne return Java Basics - Anfänger-Themen 3
M Methoden Datei einlesen und als return übergeben. Java Basics - Anfänger-Themen 8
L OOP Return Java Basics - Anfänger-Themen 10
L Erste Schritte Frage zu 'return' Java Basics - Anfänger-Themen 4
J Methoden Rekursive Return Methode Java Basics - Anfänger-Themen 2
W Return statement in Methode nur bei if-clause Java Basics - Anfänger-Themen 3
D Methoden Return-Wert wird nicht ausgegeben Java Basics - Anfänger-Themen 3
E Erste Schritte <? super Unterklasse> Return-Typ darf nicht vom Wildcard-Typ sein Java Basics - Anfänger-Themen 5
B OOP Methode mit Array mit return verlassen Java Basics - Anfänger-Themen 8
J Grundsätzliche Frage zu return Types in Methoden Java Basics - Anfänger-Themen 6
G return-wert für eine Methode Java Basics - Anfänger-Themen 1
B Methoden Probleme mit for Schleife und return Java Basics - Anfänger-Themen 5
Q Tastatureingabe direkt nach Eingabe (ohne zwischenzeitliches "Return" o.Ä ) weiterverwenden Java Basics - Anfänger-Themen 1
B Variablen Problem mit return String[] Java Basics - Anfänger-Themen 4
O Per return Run Methode beenden Java Basics - Anfänger-Themen 3
M Arrays als return Value? Java Basics - Anfänger-Themen 2
C Return statement Java Basics - Anfänger-Themen 10
T Boolean Missing return Statement?! Java Basics - Anfänger-Themen 2
Z Methoden return nullprüfung Java Basics - Anfänger-Themen 7
O Java return in Schleife Java Basics - Anfänger-Themen 4
K Was macht hier genau return? Java Basics - Anfänger-Themen 2
G Methoden Was bedeutet return in einer Methode Java Basics - Anfänger-Themen 5
Y Warum void statt Datentyp + return Java Basics - Anfänger-Themen 4
K Variablen RETURN in Case-Switch / This method must return a result of type Item Java Basics - Anfänger-Themen 4
K Erste Schritte "return" Problem bei Rekursion Java Basics - Anfänger-Themen 8
R If Verschachtelung und return; Java Basics - Anfänger-Themen 4
M Frage zum return; Befehl Java Basics - Anfänger-Themen 1
S try-catch - Variablen werden nicht an return übergeben Java Basics - Anfänger-Themen 3
C Einige Anfängerfragen (Return-Wert, Exception...) Java Basics - Anfänger-Themen 11
S Methoden Return Java Basics - Anfänger-Themen 8
T return-Wert verwenden? Java Basics - Anfänger-Themen 12
T Return eines Int-Werts? Java Basics - Anfänger-Themen 3
R Return in If Java Basics - Anfänger-Themen 10
G array return methode Java Basics - Anfänger-Themen 10
L return wird nicht erkannt? Java Basics - Anfänger-Themen 3
J Regex mit Return Java Basics - Anfänger-Themen 3
M Variablen return-array klonen Java Basics - Anfänger-Themen 3
A Methode mit Array als Param --> return Array --> Fehler Java Basics - Anfänger-Themen 3
S Zeichen einlesen ohne Return? Java Basics - Anfänger-Themen 19
P Compiler-Fehler Boolean: Missing Return Statement Java Basics - Anfänger-Themen 4
E Warum wird Methode nicht durch return-Befehl beendet? Java Basics - Anfänger-Themen 3
V Erste Schritte Return ohne Argument Java Basics - Anfänger-Themen 6
I Methoden Missing return statement; Intervallschachtellung Java Basics - Anfänger-Themen 12
S Frage zu Vererbung und return. Java Basics - Anfänger-Themen 4
R return (mehrere floats) Java Basics - Anfänger-Themen 11
E Return String Java Basics - Anfänger-Themen 10
P Methoden Methode ohne return abbrechen? Java Basics - Anfänger-Themen 12
I Return Befehl in Methode Java Basics - Anfänger-Themen 13
M Problem mit boolean. Return nicht erkannt Java Basics - Anfänger-Themen 10
P Return aus For-Schleife Java Basics - Anfänger-Themen 19
S return in GUI ? Java Basics - Anfänger-Themen 12
M This method must return a result of type int Java Basics - Anfänger-Themen 13
F Erste Schritte return (char)toUnsignedInt(value) Java Basics - Anfänger-Themen 2
A Falscher Return-Wert Java Basics - Anfänger-Themen 2
M missing return statement?! Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben