2016-05-10 28 views
0

InputMismatchExceptionをキャッチしようとしましたが、menu()メソッドが再び呼び出されたときに、エラーでスタックするまでループします。Java try catch(InputMismatchException)予期しないループ

try catch私の目的はエラーメッセージを受け取った後、menu()メソッドを再度開始することでした。

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

あなたはそれをクリアしていないとScannerはそれを読んで続けると、すべての時間は、それはあなたのcatchブロックでそれをクリアする必要があなたにInputMisMatchException

を与えるのだろうか?何かを再起動したいのであれば、再帰ではなく実際のループを使用してください –

+0

'catch 'ブロック内で' menu() 'を呼び出さなければならないと思います。 – Yazan

+0

menuPrinc()メソッドはmenu()メソッドです。ごめんなさい! –

答えて

0

あなたは無限再帰を持っている:

は、私は、次のコードを持っています。再度呼び出すには、catchブロックからmenu()を移動する必要があります。それ以外の場合は無限ループです。

0

は、私はあなたが間違った入力を入力したら、これはsc = new Scanner(System.in);

0

System.out.println("Error , only numbers!!");後に書く必要がありますね。 `;` menuPrinc()とは何である

}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

それは働いて、ありがとう! –

+0

喜んでそれはあなたを助けました..乾杯... – Sanjeev

+0

唯一の問題は、エラーメッセージが表示されないことです、それはそれを表示せずにまっすぐジャンプします。 –