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

如何解决Java程序输入大数抛出InputMismatchException的问题

异常触发原因

  • Java中int类型为32位有符号整数,取值范围仅为-2147483648 ~ 2147483647,你输入的9999999999远大于int的最大值,调用Scanner.nextInt()时会直接抛出InputMismatchException。
  • Scanner读取输入失败时,不会自动消费缓冲区里的无效输入:你在div方法里捕获了异常,但没有清空缓冲区里残留的9999999999,回到主循环再次调用scan.nextInt()时,会直接读取缓冲区里残留的无效值,再次抛出异常,而主循环没有异常捕获逻辑,直接导致程序终止。

修复方案

1. 调整变量类型适配大数值

如果需要支持更大范围的整数运算,将num1、num2、sum的类型从int改为long(取值范围-9223372036854775808 ~ 9223372036854775807),如果需要支持任意大小的整数,可以改用BigInteger类型。

2. 输入异常时清空Scanner缓冲区

每次捕获输入相关异常后,调用scan.nextLine()消费掉缓冲区里的无效输入,避免残留内容影响后续读取。

3. 为主循环增加异常捕获逻辑

避免主循环读取用户选项时,因为输入无效内容直接崩溃。

修复后完整代码

import java.util.Scanner;

public class JavaExercise1 {
    // 变量改为long支持更大数值
    static long sum, num1, num2;
    static Scanner scan = new Scanner(System.in);
    public static void add(){
        System.out.print("Enter first number to be added: ");
        num1 = scan.nextLong();
        System.out.print("Enter second number to be added: ");
        num2 = scan.nextLong();
        sum=num1+num2;
        System.out.println(num1+" + "+num2+" = "+sum);
    }
    static void sub(){
        System.out.print("Enter first number to be substracted: ");
        num1 = scan.nextLong();
        System.out.print("Enter second number to be substracted: ");
        num2 = scan.nextLong();
        sum=num1-num2;
        System.out.println(num1+" - "+num2+" = "+sum);
    }
    static void mul(){

            System.out.print("Enter first number to be multiplied: ");
            num1 = scan.nextLong();
            System.out.print("Enter second number to be multiplied: ");
            num2 = scan.nextLong();
            sum=num1*num2;
            System.out.println(num1+" x "+num2+" = "+sum);
    }
    static void div(){
        try{
            System.out.print("Enter first number to be divided: ");
            num1 = scan.nextLong();
            System.out.print("Entr second number to be divided: ");
            num2 = scan.nextLong();
            sum=num1/num2;
            System.out.println(num1+" / "+num2+" = "+sum);
        }catch(Exception e){
            System.out.println("\nException occured...");
            System.out.println(e);
            // 清空缓冲区残留的无效输入
            scan.nextLine();
        }
    }

    static void printInstructions(){
        System.out.println("1. Addition\n2. Substraction\n3. Multiplication\n4. Division\n5. Exit");
    }
    public static void main(String[] args) {
        int ch;
        do{
            System.out.println("\nEnter your choice: (Choose 0 to print instructions)");
            try {
                ch = scan.nextInt();
                switch(ch){
                    case 0: printInstructions();
                            break;
                    case 1: add();
                            break;
                    case 2: sub();
                            break;
                    case 3: mul();
                        break;
                    case 4: div();
                        break;
                    case 5: break;
                    default:
                        System.out.println("Invalid choice....");
                }
            } catch (Exception e) {
                System.out.println("Invalid input, please enter a number");
                // 清空无效输入
                scan.nextLine();
                ch = -1;
            }
        }while(ch!=5);
        // 关闭Scanner释放资源
        scan.close();
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 23:06:02