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 版权协议,转载请附上原文出处链接和本声明。