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

