【问题标题】:Java try catch (InputMismatchException) unexpected loopJava try catch (InputMismatchException) 意外循环
【发布时间】:2016-05-10 11:54:02
【问题描述】:

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

【问题讨论】:

  • 什么是menuPrinc();?如果您想重新启动某些东西,请使用实际循环,而不是递归
  • 我认为您只需在 catch 块中调用 menu()
  • menuPrinc() 是 menu() 方法,忘记改正了,抱歉!

标签: java error-handling try-catch


【解决方案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();

} 

【讨论】:

  • 唯一的问题是看不到errorr信息,直接跳转不显示。
  • 那是因为错误消息和菜单显示是连续快速的.. 为了缓解这个问题,您可以将 Thread.sleep 放在 menu 调用之前
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2021-12-18
      • 2018-01-16
      • 1970-01-01
      • 2012-09-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多