解决InputMismatchException数据输入异常问题

  • Post author:
  • Post category:其他


public static void login() {
        while (true) {
            Menus.main_menu();
            System.out.println("请选择您的身份或者操作");
           try {
               switch (sc.nextInt()) {
                   case 1:student_login();break;
                   case 2:teacher_login();break;
                   case 3:admin_login();break;
                   case 4:return;
                   default:
                       System.out.println("你的输入错误,请重新输入");break;
               }
           }catch (InputMismatchException e){
               //System.out.println("您输入的数据类型有误,请重新输入");
               //String s=sc.next();
               e.printStackTrace();
               break;
           }
        }
    }

java.util.InputMismatchException

at java.base/java.util.Scanner.throwFor(Scanner.java:939)

at java.base/java.util.Scanner.next(Scanner.java:1594)

at java.base/java.util.Scanner.nextInt(Scanner.java:2258)

at java.base/java.util.Scanner.nextInt(Scanner.java:2212)

at Student_management_system_02.Main.login(Main.java:18)

at Student_management_system_02.Main.main(Main.java:10)

输入a,a的数据类型与nextInt的数据类型不同,直接捕获异常并抛出,程序会终止

public static void login() {
        while (true) {
            Menus.main_menu();
            System.out.println("请选择您的身份或者操作");
           try {
               switch (sc.nextInt()) {
                   case 1:student_login();break;
                   case 2:teacher_login();break;
                   case 3:admin_login();break;
                   case 4:return;
                   default:
                       System.out.println("你的输入错误,请重新输入");break;
               }
           }catch (InputMismatchException e){
               //System.out.println("您输入的数据类型有误,请重新输入");
               //String s=sc.next();
               e.printStackTrace();
           }
        }
    }

如果不加上break,程序就会进入死循环,发生这种情况的原因是因为,nextInt与a的数据类型不匹配,无法读入,a就会一直在控制台中存在,就会一直读入,但是数据不匹配,无法读入,于是程序进入死循环。

解决方法

public static void login() {
        while (true) {
            Menus.main_menu();
            System.out.println("请选择您的身份或者操作");
           try {
               switch (sc.nextInt()) {
                   case 1:student_login();break;
                   case 2:teacher_login();break;
                   case 3:admin_login();break;
                   case 4:return;
                   default:
                       System.out.println("你的输入错误,请重新输入");break;
               }
           }catch (InputMismatchException e){
               System.out.println("您输入的数据类型有误,请重新输入");
               String s=sc.next();

           }
        }
    }

如果捕获到InputMismatchException异常,在异常处理语句中,将控制台的数据读入,就不会发生后面的死循环问题。



版权声明:本文为wojadhi原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。