我试图抓住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();
}
}
}
}
答案 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!!");