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

如何让Java程序在输入非数字时抛出IllegalArgumentException?求指导

解决Java输入非数字时抛出IllegalArgumentException的问题

我来帮你搞定这个问题!先看看你现有代码里的几个关键问题:

  • 你的try块是空的,没有把可能触发异常的代码包裹进去,所以完全触发不了catch逻辑
  • Scanner.nextInt()在输入非数字时,抛出的是InputMismatchException,不是你想要的IllegalArgumentException
  • 如果不处理错误输入,程序会陷入死循环——因为错误的输入会一直留在Scanner的缓冲区里,下次循环还会读取到它

下面给你两种可行的实现思路,任选其一都能达到你的需求:

思路一:捕获Scanner异常并转换为IllegalArgumentException

这种方法先捕获Scanner自带的输入不匹配异常,再手动抛出你需要的IllegalArgumentException,同时清理缓冲区里的错误输入,避免死循环。

修改后的代码如下:

import java.util.InputMismatchException;
import java.util.Scanner;

class Calculations { // 按照Java编码规范,类名建议用大驼峰命名哦
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int number;
        int total = 0;

        while (true) {
            try {
                number = scan.nextInt();
                if (number == 0) {
                    break;
                }
                total += number;
            } catch (InputMismatchException e) {
                // 手动抛出IllegalArgumentException,带上自定义提示
                throw new IllegalArgumentException("输入内容不是有效的数字,请重新输入", e);
                // 如果不想直接终止程序,而是提示后继续运行,可以换成这段代码:
                // System.err.println("错误:输入内容不是有效的数字,请重新输入");
                // scan.next(); // 跳过缓冲区里的错误输入
            }
        }
        System.out.println("Total is " + total);
        scan.close(); // 记得关闭Scanner资源,避免泄漏
    }
}

思路二:先验证输入格式,再手动抛出异常

这种方法先读取输入的字符串,判断是否能转为整数,如果不能就直接抛出IllegalArgumentException,灵活性更高。

代码示例:

import java.util.Scanner;

class Calculations {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int number;
        int total = 0;

        while (true) {
            String input = scan.next();
            try {
                number = Integer.parseInt(input);
                if (number == 0) {
                    break;
                }
                total += number;
            } catch (NumberFormatException e) {
                throw new IllegalArgumentException("输入的'" + input + "'不是有效的数字", e);
                // 若想继续运行程序,替换为提示语句即可:
                // System.err.println("错误:输入的'" + input + "'不是有效的数字,请重新输入");
            }
        }
        System.out.println("Total is " + total);
        scan.close();
    }
}

小提示:

  • 按照Java编码规范,类名应该采用大驼峰命名(比如Calculations而非calculations),建议修正
  • 如果不想让程序直接终止,可以把throw语句换成错误提示,同时根据思路不同处理错误输入(第一种思路需要用scan.next()跳过错误内容,第二种思路已经读取了字符串,无需额外操作)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:27:27