java Scanner类的nextInt方法接受非法输入问题
java Scanner类的nextInt方法接受非法输入问题
问题代码
package com.zy.code.t1;
import java.util.InputMismatchException;
import java.util.Scanner;
public class Demo1 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
boolean flag = true;
while (flag) {
System.out.println("请输入一个数字");
int num = 0;
try {
num = scanner.nextInt();
} catch (InputMismatchException e) {
System.out.println(e.toString() + "输出格式有误!!!");
// scanner.next();
}
switch (num) {
case 1:
System.out.println("选项1");
break;
case 2:
System.out.println("选项2");
break;
case 3:
flag = false;
break;
default:
System.out.println("重新输入");
break;
}
}
}
}
结果:

-
原因
nextInt()方法直接受整型数据,如果输入非整型,就会有异常,就不会读取文本缓冲区的内容,文本缓存区的内容就不会消失,即使下次再调用nextInt()方法,因为文本缓存区的内容并未被读取一直存在,异常就继续发生,依次循环。
-
解决方法
在catch里中加入Scanner.next()方法,读取缓冲区的内容,清空缓存区
package com.zy.code.t1; import java.util.InputMismatchException; import java.util.Scanner; public class Demo1 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); boolean flag = true; while (flag) { System.out.println("请输入一个数字"); int num = 0; try { num = scanner.nextInt(); } catch (InputMismatchException e) { System.out.println(e.toString() + "输出格式有误!!!"); //处理的输入的不合理值 scanner.next(); } switch (num) { case 1: System.out.println("选项1"); break; case 2: System.out.println("选项2"); break; case 3: flag = false; break; default: System.out.println("重新输入"); break; } } } }结果


浙公网安备 33010602011771号