2016-05-10 13 views
0

Ich versuche, eine InputMismatchException fangen es funktioniert bei der ersten Interaktion, aber wenn die menu() Methode erneut aufgerufen wird, beginnt es Schleife, bis es in einem Fehler stecken bleibt.Java try catch (InputMismatchException) unerwartete Schleife

In der try catch mein Ziel war es, eine Fehlermeldung zu erhalten und danach starten Sie die menu() Methode erneut.

Ich habe den folgenden Code:

public class Menu extends ProfilesManager { 
    static Scanner sc = new Scanner(System.in); 

    public static void menu() { 

     int number; 
     System.out.println("** Welcome... **\n "); 
     System.out.println("* what you wanna do?:\n"); 
     System.out.println("(1) Login \n(2) Register \n(3) Find User \n(4) Exit\n"); 
     System.out.print("-Answer?: "); 

     try { 
      number = sc.nextInt();    
      if (number == 1) { 
       Login(); 
      } else if (number == 2) { 
       Register(); 
      } else if (number == 3) { 
       FindUser(); 
      } else if (number== 4) { 
       Exit(); 
      }              
     } catch (InputMismatchException e) { 
      System.out.println("Error , only numbers!!"); 
      menu();   
      } 
     } 
    } 
} 
+3

Was 'menuPrinc() ist;'? Wenn Sie etwas neu starten möchten, verwenden Sie eine tatsächliche Schleife, nicht Rekursion –

+0

ich denke, Sie müssen nur 'menu()' in der 'catch' Block – Yazan

+0

menuPrinc() ist die Methode menu(), ich habe vergessen, es zu korrigieren, Es tut uns leid! –

Antwort

0

Sie haben eine unendliche Rekursion. Sie müssen das Menü() aus dem Catch-Block herausnehmen, wenn Sie es erneut aufrufen möchten. Ansonsten ist es Endlosschleife.

0

Ich denke, man sc = new Scanner(System.in); nach System.out.println("Error , only numbers!!");

0

schreiben sollte, weil ist, wenn Sie eine falsche Eingabe ein. Sie räumen es nicht und Scanner halten auf sie zu lesen und jedes Mal wird es Ihnen InputMisMatchException

Sie müssen es in Ihrem Catch-Block löschen

}catch(InputMismatchException e){ 

    System.out.println("Error , only numbers!!"); 
    sc.nextLine(); 
    // Put 2 second delay 
    try{ 
     Thread.sleep(2000); 
    }catch(InterruptedException ex){ 
     ex.printStackTrace(); 
    } 
    menu(); 

} 
+0

Es hat funktioniert, danke! –

+0

Froh, dass es dir geholfen hat .. Prost ... – Sanjeev

+0

das einzige Problem ist, dass die errorr Nachricht nicht gesehen werden kann, es springt gerade ohne es zu zeigen. –