InputMismatchException

InputMismatchException

我试图捕获一个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();
            }
        }
    }
}

最佳答案

这是因为一旦您输入了错误的输入。您没有清除它,并且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();

}

关于java - Java try catch (InputMismatchException)意外循环,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37137790/

10-13 23:51