import java.util.Scanner;
public class HelloWorld{
public static void main(String[] args){
int i = 0;
Scanner sc = new Scanner(System.in);
System.out.println("请输入数量:");
while(true) {
try {
i = sc.nextInt();
System.out.println("i="+i);
break;
} catch(Exception e) {
System.out.println("请输入一个整型数字:");
}
}
}
}
执行如下:
请输入数量:
a
请输入一个整型数字:
请输入一个整型数字:
请输入一个整型数字:
……
在接收到一个非法输入a时,程序重复不断抛出异常提示“请输入一个整型数字:”,而不能中断接收新的输入,请问这是为什么,错在哪里?
2 个解决方案
#1
看nextInt的源码
当你输入不是整数时
会抛出异常,并且它的流指针不会往下移
所以多次读取的都是同一个数据
抛出异常不会执行后面的代码,即不输出信息也不会break跳出循环
异常被处理了没有上抛所以也不报错只运行
当你输入不是整数时
会抛出异常,并且它的流指针不会往下移
所以多次读取的都是同一个数据
抛出异常不会执行后面的代码,即不输出信息也不会break跳出循环
异常被处理了没有上抛所以也不报错只运行
#2
谢谢楼上的!
#1
看nextInt的源码
当你输入不是整数时
会抛出异常,并且它的流指针不会往下移
所以多次读取的都是同一个数据
抛出异常不会执行后面的代码,即不输出信息也不会break跳出循环
异常被处理了没有上抛所以也不报错只运行
当你输入不是整数时
会抛出异常,并且它的流指针不会往下移
所以多次读取的都是同一个数据
抛出异常不会执行后面的代码,即不输出信息也不会break跳出循环
异常被处理了没有上抛所以也不报错只运行
#2
谢谢楼上的!