You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 21:06:03