java try-catch(inputmismatchexception)意外循环

xbp102n0  于 2021-07-03  发布在  Java
关注(0)|答案(3)|浏览(369)

我想抓住一个机会 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();           
            } 
        }
    }
}
mefy6pfw

mefy6pfw1#

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

mctunoxg

mctunoxg2#

我想你应该写信 sc = new Scanner(System.in); 之后 System.out.println("Error , only numbers!!");

k2fxgqgv

k2fxgqgv3#

这是因为一旦输入错误。你没有清理它 Scanner 会一直读下去,每次都会给你 InputMisMatchException 你得把它放在你的拦网里

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

}

相关问题