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

Java如何验证用户整数输入并解决InputMismatchException异常

问题根因

  • 你抛出InputMismatchException的核心原因是:当Scanner检测到输入流中不存在整数时,错误输入仍然滞留在输入缓冲区里,你没有先清理这部分非法输入就直接调用nextInt()读取,就会触发类型不匹配异常。
  • 原有逻辑的内层循环设计错误:进入内层循环的前提已经是当前输入不是整数,你直接调用nextInt()必然触发异常,也没有实现重复提示直到输入合法的逻辑。

实现方案

不需要用try/catch,调整输入读取逻辑即可:

  1. 每次检测到非整数输入时,先调用next()把缓冲区里的非法输入清空,避免重复读取错误内容
  2. 内层循环仅用来处理当前这一轮的非法输入场景,不会触发外层主循环重走,也就不会重复输出初始的「Enter an integer: 」提示

修正后完整代码

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Scanner inputScanner = new Scanner(System.in);
        int counter = 0;
        boolean run = true;
        int userInput = 0;
        
        while (run) {
            System.out.print("Enter an integer: ");
            // 先判断输入是否为整数
            if (inputScanner.hasNextInt()) {
                userInput = inputScanner.nextInt();
            } else {
                // 进入非法输入处理循环,直到拿到合法整数
                while (!inputScanner.hasNextInt()) {
                    // 先清空缓冲区的非法输入
                    inputScanner.next();
                    System.out.print("You need to enter an Integer: ");
                }
                // 拿到合法整数后再赋值
                userInput = inputScanner.nextInt();
            }
            
            System.out.println(userInput);
            if (counter == 6) {
                run = false;
            }
            counter++;
        }
        inputScanner.close();
    }
}

逻辑说明

  • 当用户第一次输入非整数时,会直接进入内层循环,先清掉非法输入,再输出指定的二次提示,直到用户输入合法整数才退出内层循环,整个过程不会触发外层循环的计数增加,也不会重复输出初始的输入提示,完全符合需求。
  • 最后补充的inputScanner.close()是规范的资源释放操作,避免资源泄漏。

内容的提问来源于stack exchange,提问作者csPYTHONcs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 20:06:00