Methoden Return Anweisung beendet Methode nicht, stattdessen wird diese zweimal durchlaufen

Schwarz1603

Neues Mitglied
Hallo,

ich sitze jetzt schon seit einiger Zeit an folgender Methode, welche einen String in einen Integer Wert umwandelt. Ich weiss, dass der hier gezeigte nicht der beste Weg ist, jedoch geht es um was anderes.
Die Werte, die diese Methode umwandeln soll, beginnen häufig mit einem $ Zeichen. In der If-Verzweigung soll dieses Zeichen gelöscht und die Methode mit dem neuen Wert wieder aufgerufen werden. Das funktioniert soweit auch, jedoch gibt die Methode bei return nichts zurück und springt stattdessen auf die Zeile 11, "String replace = s.replace(",", ".");", und zwar mit dem ursprünglichen Wert, in dem das $ Zeichen noch vorhanden ist. Warum?

Java:
  public static int parseStringtoIntCent(String s) throws Exception {
        
        try {

            if (s.contains("$")) {
                String newstr = s.replace("$", "");
                parseStringtoIntCent(newstr);
            } else {
            }

            String replace = s.replace(",", ".");
            float cent = Float.parseFloat(replace) * 100;
            return (int) cent;
        } catch (NumberFormatException e) {
            throw new Exception("Fehler: Ungültiger Wert eingegeben! " + e.toString());
        }

Diese Methode befindet sich zurzeit in einer Klasse mit der main Methode, es gibt also keine weiteren Einflüsse.

Schon mal vorab Danke für die Mühe.

Schwarz1603
 
Man würde hier nicht die Methode neu aufrufen, sondern einfach s durch eben den ersetzten String ersetzen.

Ansonsten ist dein else zweig leer und der RÜckgabewert dener aufgerufenen Methode wird sowieso nicht verarbeeitet.
 
Wenn du den Wert vom Aufruf in Zeile 7 zurückgeben willst, muss natürlich auch ein [c]return[/c] davor, ansonsten wird der zurückgelieferte Wert einfach ignoriert und es geht weiter im Text.

Es ist nicht unüblich, dass das Rückgabewert einer Methode ignoriert wird (man denke z.B. an die beiden [c]List.remove()[/c] Methoden), deshalb warnt dich auch der Compiler nicht.

Und wie du selbst schon sagst, ist das nicht der beste Weg. Das sollte eigentlich auch so funktionieren (ungetestet):

Java:
public static int parseStringtoIntCent(String s) throws Exception {
        try {
            String newstr = s.replace("$", "").replace(",", ".");
            float cent = Float.parseFloat(newstr ) * 100;
            return (int) cent;
        } catch (NumberFormatException e) {
            throw new Exception("Fehler: Ungültiger Wert eingegeben! " + e.toString());
        }
}
 
Zuletzt bearbeitet:
Hallo,

erstmal Danke.

Ich habe tatsächlich das return vor dem rekursiven Aufruf vergessen.
Dadurch habe ich jetzt auch verstanden, warum die Methode nach dem return noch weiterlief.
 

Zurück
Oben