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
相关产品推荐
相关产品推荐

