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

Java控制台输入求和代码运行抛出InputMismatchException异常如何解决

Java InputMismatchException 报错排查及解决

报错核心原因

java.util.InputMismatchException是Scanner类的输入类型匹配异常,你的场景下触发原因分为两类:

  • 输入内容不符合整数格式:nextInt()方法仅能解析合法的整数字符串,如果你输入了小数、字母、中文、除整数前正负号外的特殊符号,就会触发匹配失败抛出异常
  • 代码写法不规范的潜在问题:你创建了2个Scanner实例同时绑定System.in输入流,第一个Scanner读取输入时会缓冲流内内容,可能导致第二个Scanner读取时拿到异常内容,也有概率触发该报错

修复方案

第一步:优化Scanner实例使用

全局仅创建一个Scanner实例绑定System.in即可,基础修复代码如下:

import java.util.Scanner;

public class TakingInput {
    public static void main (String []args){
        // 全局仅创建一个Scanner实例
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter number1: ");
        int x = sc.nextInt();
        System.out.println("Enter number2: ");
        int y = sc.nextInt();
        
        int z = y + x;
        System.out.println("the sum is : " + z);
        sc.close();
    }
}

第二步:增加输入合法性校验(可选,避免程序直接崩溃)

如果需要兼容非法输入场景,可以先通过hasNextInt()判断输入是否为合法整数,再做读取,示例代码如下:

import java.util.Scanner;

public class TakingInput {
    public static void main (String []args){
        Scanner sc = new Scanner(System.in);
        int x, y;
        
        // 校验第一个输入
        System.out.println("Enter number1: ");
        while (!sc.hasNextInt()) {
            System.out.println("输入不是合法整数,请重新输入:");
            sc.next(); // 读取掉非法输入,避免死循环
        }
        x = sc.nextInt();
        
        // 校验第二个输入
        System.out.println("Enter number2: ");
        while (!sc.hasNextInt()) {
            System.out.println("输入不是合法整数,请重新输入:");
            sc.next();
        }
        y = sc.nextInt();
        
        int z = y + x;
        System.out.println("the sum is : " + z);
        sc.close();
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 05:15:04