2012-12-10 9 views
7

Po wykryciu wyjątku w tym kodzie, uruchamiana jest metoda menuSystem, ale po przejściu do wprowadzenia numeru program zostaje zamknięty i wyświetlany jest komunikat "Kompilacja się powiodła" . Czy istnieje jakiś sposób, aby wrócić do pętli while, gdy wystąpi wyjątek?Kontynuacja wykonywania pętli po wychwyceniu wyjątku w próbie/przechwytywaniu

public static void main(String[] args) { 
    final UnitResults myUnit = new UnitResults(10, "Java"); 
    int option = menuSystem(); 

    try { 
     while (option != 0) { 
     final Scanner keyb = new Scanner(System.in); 
     System.out.println(""); 
     switch (option) { 
     } 
     } 
    } catch (Exception InputMismachException) { 
     System.out.println("\nPlease Enter a Valid Number\n"); 
     option = menuSystem(); 
    } 
} 
+3

Chcesz umieścić próbę/catch w pętli while – antlersoft

+1

Proszę sformatować swój kod lepiej, gdy poprosisz o pomoc na publicznym forum. – Perception

+0

Jeśli prawidłowo wstawiasz swój kod, nie będziesz potrzebować tych zbędnych komentarzy "// pętla końcowa", "// koniec przełącznika" itd. –

Odpowiedz

15

umieścić try/catch wewnątrz pętli while:

while (option != 0) { 
     final Scanner keyb = new Scanner(System.in); 
     System.out.println(""); 
     try { 
      switch (option) { 

      } 
     } catch (Exception InputMismachException) { 
      System.out.println("\nPlease Enter a Valid Number\n"); 
      option = menuSystem(); 
     } 
    } 
1

Umieść try i catch wewnątrz pętli while. Jeśli kod używa nextInt(), musisz pominąć nieprawidłowe dane wejściowe, ponieważ nie będzie ono zużyte w przypadku niezgodności.

Byłoby możliwe, aby uniknąć wyjątku magazynowe InputMismatchException za pomocą hasNextInt() metod Scanner aż ważnego wejścia zostanie wprowadzony przed przystąpieniem do spożywania:

while (!kb.hasNextInt()) kb.next(); 
0

Innym sposobem można to zrobić:

List<File> directories; 
    ... 
    for (File f : directories) { 
     try { 
      processFolder(f); 
     } catch(Exception e) { 
      SimpleLog.write(e); 
     } 
    } 
+0

Wiem, że jest to starsze pytanie, ale czy mógłbyś rozwinąć to, co "kontynuuj" ma w tym przypadku zrobić? – Nils

+0

Niestety, kontynuacja jest dorozumiana. Będzie mimo to kontynuowany przez pętlę. – djangofan