Java使用try/catch捕获InputMismatchException输出不符合预期问题
问题原因
- 当
scnr.nextInt()遇到非数字输入触发InputMismatchException时,Scanner不会自动移动指针跳过当前的无效输入,指针会停留在错误的输入内容位置。 - 你的输入中
Mary后面跟着的是Beth,读取年龄时触发异常后,指针还停在Beth处,下一轮循环的scnr.next()就会把Beth当成名字读取,后续的19就被识别为Beth的年龄,最终出现多余的Beth 20输出。 - 异常时给age赋值为-1、输出时加1得到0的逻辑是正确的,问题仅出在异常触发后未清理无效输入。
修复代码
只需要在catch块中新增一行scnr.next()跳过无效输入即可,完整代码如下:
package study3; import java.util.Scanner; import java.util.InputMismatchException; public class NameAgeChecker { public static void main(String[] args) { Scanner scnr = new Scanner(System.in); String inputName; int age = 0; inputName = scnr.next(); while (!inputName.equals("-1")) { try { age = scnr.nextInt(); } catch (InputMismatchException expct) { age = -1; scnr.next(); // 新增这行,跳过无效的非数字输入 } System.out.println(inputName + " " + (age + 1)); inputName = scnr.next(); } } }
内容的提问来源于stack exchange,提问作者Jake
相关产品推荐
相关产品推荐

