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

