Java try catch(InputMismatchException)意外循环

时间:2016-05-10 11:54:02

标签: java error-handling try-catch

我试图抓住InputMismatchException它在第一次交互时起作用,但是当再次调用menu()方法时,它会开始循环,直到它陷入错误。

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 个答案:

答案 0 :(得分:1)

你有无限的递归。如果你想再次调用它,你必须将menu()移出catch块。否则它就是无限循环。

答案 1 :(得分:1)

这是因为一旦输入错误的输入。你没有清除它,Scanner将继续阅读它,每次它都会给你InputMisMatchException

您需要在catch块中清除它

}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();

} 

答案 2 :(得分:0)

我想你应该在sc = new Scanner(System.in);

之后写System.out.println("Error , only numbers!!");