Java: catch + Rekursion = Endlosschleife :-/

Dieses Thema im Forum "Programmieren" wurde erstellt von RoCMe, 10. Juni 2005.

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. RoCMe

    RoCMe ROM

    Registriert seit:
    9. Juni 2005
    Beiträge:
    3
    Hi!
    Ich will eine Funktion schreiben (in Java), die mit Hilfe eines (zuvor schon initialisierten) Scanners (als static deklariert) einen Double Wert einliest. Gibt der Benutzer wider Erwarten keinen Double (sondernz.B. einen Buchstaben o.Ä.) ein, dann soll die Funktion wieder und wieder nachfragen, bis ein vernünftiger Wert eingegeben wurde.

    Das ganze sah in der Theorie sehr einfach aus: Im try-Block einer Variablen result den eingelesenen Wert zuweisen, evtl. Exceptions landen im catch Block. Hier wird result das Ergebnis der neu aufgerufenen Funktion zugewiesen (Rekursion!!!).
    Und im finally-Block wird letztlich mit return result result als Ergebnis zurückgegeben-
    Code:
    private static double readLeftBorder() {
      double result;
      System.out.println("Linke Intervallgrenze: ");
      try {
        result =  scanner.nextDouble();
      }
      catch (Exception e) {
        System.out.println("Kein gültiger Wert");
        result = readLeftBorder();
      }
      finally {
        return result;
      }
    }
    
    Die Funktion ist als static deklariert, weil ich sie direkt in der Main-Methode meiner KLasse aufrufen will, ohne vorher eine Instanz zu erzeugen.
    Beim Aufruf der obigen Funktion wird zunächst wie erwartet nach einem Double gefragtg, den der Nutzer eingeben kann - tut er das abert nicht nach den Vorstellungen des Programms, rächt sich dieses mit einer Endlosschleife. Die Rekursion bewikr nicht (wie erwartet), dass eine erneute Abfrage durchgeführt wird, sondern fragt nach einem neuen Wert und gibt sogleich die Fehlermeldung aus, fragt wieder nach einem Wert usw.
    Was kann ich dagegen tun???
    mfg, thx im Vorraus
    RoCMe
     
  2. CeNoRiDeR

    CeNoRiDeR Byte

    Registriert seit:
    3. April 2005
    Beiträge:
    46
    schreib mal bitte den vollständigen code...und warum machst du die eingabe mit scanner? nimm doch lieber einen BufferedReader...
     
  3. RoCMe

    RoCMe ROM

    Registriert seit:
    9. Juni 2005
    Beiträge:
    3
    Auf Wunsch der vollständige Code (bis zum Erreichen der Endlosschleife):
    Code:
    public class TestClass {
      private static Scanner scanner;
      private static Formatter formatter;
      
      public static void main(String[] arguments) {
        double leftBorder;
        scanner = new Scanner(System.in);
        scanner.useLocale(Locale.GERMANY);
        formatter = new Formatter(System.out, Locale.GERMANY);
    
        leftborder = readLeftBorder();  //siehe oberes Posting
       ...
    Ich bin Student und in der Vorlesung wurde uns nur die Scanner-Klasse vorgestellt - und was anderes dürfen wir (zumindest in der Klausur) dann auch nicht verwenden!!!

    Ich würde ja auch den Dozenten oder meinen Übungsleiter fragen statt euch zu belästigen, aber leider erreiche ich keinen ...
    Danke für eure / deine Hilfe!!
    mfg
    RoCMe
     
  4. CeNoRiDeR

    CeNoRiDeR Byte

    Registriert seit:
    3. April 2005
    Beiträge:
    46
    was mir bis jetzt schonmal auffällt wird in deiner funktion wenn alles richtig funktioniert deinem "result" kein wert zugewiesen! Also müsstest du auch kein ergebnis zurückgeliefert bekommen...
     
  5. RoCMe

    RoCMe ROM

    Registriert seit:
    9. Juni 2005
    Beiträge:
    3
    Sorry, ich hab hier mit meinem Rechner keinen Internetanschluss und muss den Kram immer abtippen - da passiert sowas ganz leicht - ich habs oben berichtigt.
    Sonst keine Idee was ich anders machen muss?
     
Status des Themas:
Es sind keine weiteren Antworten möglich.

Diese Seite empfehlen