如何在无流控制语句下实现输入值范围校验并抛出异常?
问题描述
需要编写Java程序,支持同时输入两个整数,要求值范围在50-127之间;若值小于50或大于127,需抛出异常提示“输入的值过低或过高”,且不能使用流控制语句(如if、else、while等)。
更新1:已实现127上限校验,尝试用
next(Pattern)实现下限校验,已联系老师确认要求。
更新2:确认仅需满足127的上限校验即可!
解决方案
针对需求,提供两种符合要求的实现方案,核心是避免使用流控制语句完成校验:
方案1:使用断言实现校验(无流控制)
断言语句不属于流控制语句,可直接完成范围校验,不满足条件时自动抛出异常:
import java.util.Scanner; public class A1_Q1 { public static void main(String[] args) { int p, q; Scanner kBoard = new Scanner(System.in); System.out.println("Welcome to the Simple 3D-Space Program:"); System.out.println("+++++++++++++++++++++++++++++++++++++++"); System.out.print("Enter values for 'p' and 'q' simultaneously. Must be ≤ 127:"); // 直接读取两个整数,自动处理输入分隔符,避免手动分割字符串的错误 p = kBoard.nextInt(); q = kBoard.nextInt(); // 断言校验:不满足条件时抛出AssertionError,携带指定提示 assert p <= 127 && q <= 127 : "输入的值过低或过高"; // 输出验证结果 System.out.println("输入的有效值:" + p + " " + q); } }
注意事项
- Java默认关闭断言功能,运行程序时需添加VM参数
-ea启用断言,例如:java -ea A1_Q1
方案2:利用异常表达式实现(无需VM参数)
若要求无需额外参数即可触发异常,可通过静态方法结合Java 14+的表达式特性实现(无流控制语句):
import java.util.Scanner; public class A1_Q1 { // 校验方法:无流控制语句,通过三元表达式触发异常 private static int checkUpperLimit(int num) { return num <= 127 ? num : throw new IllegalArgumentException("输入的值过低或过高"); } public static void main(String[] args) { int p, q; Scanner kBoard = new Scanner(System.in); System.out.println("Welcome to the Simple 3D-Space Program:"); System.out.println("+++++++++++++++++++++++++++++++++++++++"); System.out.print("Enter values for 'p' and 'q' simultaneously. Must be ≤ 127:"); p = checkUpperLimit(kBoard.nextInt()); q = checkUpperLimit(kBoard.nextInt()); System.out.println("输入的有效值:" + p + " " + q); } }
原代码问题优化
原代码手动分割输入字符串的方式存在潜在问题:
- 若输入包含多空格、前后空格或非数字字符,会导致分割错误或转换失败
- 替换为
Scanner.nextInt()可自动处理各种合法输入格式,提升程序健壮性
内容的提问来源于stack exchange,提问作者Poppele
相关产品推荐
相关产品推荐

