Java尝试捕获(InputMismatchException)意外循环
我试图捕获一个Java尝试捕获(InputMismatchException)意外循环,java,error-handling,try-catch,Java,Error Handling,Try Catch,我试图捕获一个输入不匹配异常它在第一次中断时工作,但是当再次调用menu()方法时,它开始循环,直到陷入错误 在try catch中,我的目标是获取一条错误消息,然后再次启动菜单()方法 我有以下代码: public class Menu extends ProfilesManager { static Scanner sc = new Scanner(System.in); public static void menu() { int number;
输入不匹配异常
它在第一次中断时工作,但是当再次调用menu()
方法时,它开始循环,直到陷入错误
在try catch
中,我的目标是获取一条错误消息,然后再次启动菜单()
方法
我有以下代码:
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();
}
}
}
}
你有无限递归。如果要再次调用,必须将menu()移出catch块。否则它是无限循环。您有无限递归。如果要再次调用,必须将menu()移出catch块。否则它就是无限循环。我想你应该写
sc=newscanner(System.in)
afterSystem.out.println(“错误,仅数字!!”)
我想你应该写sc=newscanner(System.in)
afterSystem.out.println(“错误,仅数字!!”)代码>这是因为一旦输入错误。您没有清除它,Scanner
将继续读取它,每次它都会给您输入不匹配异常
你需要在你的拦网中清除它
}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();
}
这是因为一旦输入了错误的输入。您没有清除它,Scanner
将继续读取它,每次它都会给您输入不匹配异常
你需要在你的拦网中清除它
}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();
}
什么是menuPrinc()代码>?如果您想重新启动某些东西,请使用实际循环,而不是递归。我想您只需在catch
blockmenuPrinc()中调用menu()
,这是menu()方法,我忘了更正它,抱歉!什么是menuPrinc()代码>?如果您想重新启动某些东西,请使用实际循环,而不是递归。我想您只需在catch
blockmenuPrinc()中调用menu()
,这是menu()方法,我忘了更正它,抱歉!唯一的问题是,错误信息看不见,它直接跳转而不显示。这是因为错误信息和菜单显示是快速连续的。。要缓解此问题,您可以将Thread.sleep
放在menu
调用之前。唯一的问题是无法看到错误消息,它会直接跳转而不显示。这是因为错误消息和菜单显示是快速连续的。。要缓解此问题,您可以在调用菜单之前放置线程.sleep