try-catch Block Verständnisfrage

cheat.008

Aktives Mitglied
Hallo Java-Freunde,

wird im folgenden Beispiel eine NumberFormatException durch das parsen des Strings s ausgelöst und der catch-Teil abgearbeitet, wird allgemein nach einem catch-Block der try-Block noch einmal versucht (abgesehen von der while-Schleife)?


Code:
...
  public static void main( String[] args ) {
    int number = 0;
 
    while ( true ) {
      try {
        String s = javax.swing.JOptionPane.showInputDialog( "Bitte Zahl eingeben" );
        number = Integer.parseInt( s );
    
        break;
      }
      catch ( NumberFormatException e ) {
        System.err.println( "Das war keine Zahl!" );
      }
    }

    System.out.println( "Danke für die Zahl " + number );
    System.exit( 0 );
  }
...
 
Zuletzt bearbeitet:
Try-Block wird nicht wiederholt. Wenn du auf jeden Fall willst, das etwas ausgeführt wird, benutze finally{..}
 
catch ist für die Fehlerbehandlung des Try gedacht, mehr nicht. Schleifen musst du selbst schreiben.finally wird nach try/catch ausgeführt, so oder so findet aber keine Wiederholung statt.
 
Das würde ja auch keinen Sinn ergeben. Welchen Vorteil hat es (normalerweise) etwas nochmal zu versuchen, was schon mal schiefgelaufen ist?
Methoden können sich allerdings selbst aufrufen. Aber ob das so guter Stil ist, kann ich dir nicht sagen...
 
Naja, bei der Auswertung einer Eingabe oder dem Einlesen von veränderbaren Daten ergibt das sehr wohl Sinn, aber eben nur in dem Fall und darum muss man sich selbst kümmern. Man muss schon selbst sagen, was im Fehlerfall passieren soll.
 
Mir ist grade noch aufgefallen, dass die Schleife, die du hast, doch zu einer Wiederholung des try-Blocks führt. Ist dir bewusst, dass sich das Programm so lange in einer Schleife aufhängt bis "s" eine Zahl wird? Der "catch-Block" enthält ja kein "break"
 
Mir ist grade noch aufgefallen, dass die Schleife, die du hast, doch zu einer Wiederholung des try-Blocks führt. Ist dir bewusst, dass sich das Programm so lange in einer Schleife aufhängt bis "s" eine Zahl wird? Der "catch-Block" enthält ja kein "break"
Das ist ja auch der Sinn, das soll so lange laufen, bis eine Zahl eingegeben wird.
 
break; ist etwas unschön und System.exit( 0 ); ist auch etwas unschön, aber ansonsten ist es durchweg Usus, das Benutzereingabenvalidierung über Ausnahmen gesteuert werden darf.

Fast schön finde ich auch, daß hier mal nicht Scanner an falscher Stelle verwendet wurde.

Vielleicht sollte ich das mal in meine Signatur tun. 😳
 
Fehlerbehandlung legitim, kein Scanner, Gui hübsch, alles toll.
Dabei ist es doch so viel schöner 😛

Java:
int number = -1;

do {
    String s = javax.swing.JOptionPane.showInputDialog("Bitte Zahl eingeben");
    if (s.matches("\\d+")) {
        Scanner scanner = new Scanner(s);
        number = scanner.nextInt();
    } else {
        System.err.println("Das war keine Zahl!");
    }
} while (number < 0);
 

Zurück
Oben