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

Java无try-catch下,Scanner读取非整数输入时打印自定义error的实现

无try/catch的Scanner输入校验实现
  • 核心实现原理:使用Scanner类内置的hasNextInt()方法做输入预校验,该方法会提前判断控制台输入流的下一个内容是否为可解析的整数,整个过程不会抛出InputMismatchException,完全适配不使用try/catch块的要求。
  • 冗余逻辑清理:原代码中“将读取到的整数转字符串、再用正则校验是否为数字”的分支属于无效判断——只要代码能执行到nextInt()读取整数值的步骤,说明输入内容必然是整数,转字符串后的格式匹配数字正则的校验无实际作用,可直接移除。
  • 规则保留说明:完整保留进制值在1~36范围的校验逻辑,不符合范围要求时输出"error"并退出程序。

修正后的代码

Scanner sc = new Scanner(System.in);
// 非整数输入直接触发错误提示,无异常抛出
if (!sc.hasNextInt()) {
    System.out.print("error");
    System.exit(0);
}
int source_radix = sc.nextInt();
// 保留原进制范围校验逻辑
if (source_radix < 1 || source_radix > 36) {
    System.out.print("error");
    System.exit(0);
}

行为匹配说明:

  • 输入非整数(如字母、特殊符号、带小数点的数字)时,会直接命中!sc.hasNextInt()分支,打印"error",不会触发未捕获的输入不匹配异常。
  • 输入整数但不在1~36区间时,会命中范围校验分支,打印"error",和原代码的合法校验逻辑完全一致。
  • 输入1~36范围内的整数时,程序正常向下执行,和原有流程无差异。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.28 23:54:03