Java程序输入时出现异常,为什么异常处理再循环输入时,就直接没让输入而直接跳到异常处理中去了

如这段代码:intchoice=0;inti=0;while(true){try{choice=scanner.nextInt();//输入}catch(InputMis... 如这段代码:
int choice = 0;
int i = 0;
while(true){
try{
choice=scanner.nextInt();//输入
}catch(InputMismatchException ex){
System.out.println("输入格式错误,必须为整数");
choice = 0;
i = 1;
}
if(i == 0)
break;
}
如果输入的不是int型时,会异常处理,之后想让从新输入,结果却没有让输入了而直接跳到异常处理去了
结果是这样的:
请选择:p //第一次输入的
输入格式错误,必须为整数
输入格式错误,必须为整数
输入格式错误,必须为整数
之后的就直接这样了
忘了,while(true)后面掉了一句,i = 0;
求高手指点,这是怎么回事?怎样解决这样的问题?
展开
 我来答
duzc2
2012-10-14 · TA获得超过2512个赞
知道大有可为答主
回答量:1987
采纳率:50%
帮助的人:2074万
展开全部
scanner.next(); // 增加这样一行
System.out.println("输入格式错误,必须为整数");
choice = 0;
i = 1;

因为刚才对于读取的内容格式匹配不正确,所以并没有改变读取缓冲区。
下次运行到nextInt的时候,还是读到了p,所以每次这里都会直接报错。

加上next之后,就读了一次缓冲区,所以缓冲区就清空了,下次就等待输入了
追问
意思就是,读取之前先判断了输入的数据类型,如果异常了并没有读取输入缓存区数据,也就不清空缓存处理是吗
追答
对。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式