我们先看 JAVA 的 api 文档中的原话:
当扫描器抛出 InputMismatchException 时, 该扫描器不会传递导致该异常的标记, 因此可以通过其他某种方法来获取或跳它.
这是 java API 文档中的原话.
其实其意思就是说:```
如果 nextInt 方法执行时输入 a 字符, 这个时候没有成功解析出一个整数, 那么你的本次输入不会被忽略. 因为它或许能被其它格式解析.
那么你的程序中输入了 a 后, 出现异常, number 被赋值 100, 开始下一次循环, 但这时数据缓冲区内你上次输入的 a 还在, 并没有清除, 这时继续解析 a, 还是错误, 于是这个过程就一直重复下去了.
所以解决的方法有很多, 举一个例子:
现在你要改的是, 出现错误把这次的输入清除, 只要在 catch 中, 加一句: input.next() 就搞定了!, 其实意思就是说把上一次的缓存清除就行了.
也可以将 Scanner 写在 try 里面
来源: http://www.bubuko.com/infodetail-2728948.html