1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

Java: catch + Rekursion = Endlosschleife :-/

Discussion in 'Programmieren' started by RoCMe, Jun 10, 2005.

Thread Status:
Not open for further replies.
  1. RoCMe

    RoCMe ROM

    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

    schreib mal bitte den vollständigen code...und warum machst du die eingabe mit scanner? nimm doch lieber einen BufferedReader...
     
  3. RoCMe

    RoCMe ROM

    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

    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

    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?
     
Thread Status:
Not open for further replies.

Share This Page