如何在Java中结合JOptionPane与数组实现合法油箱数量输入校验?
问题分析与修正
你的油箱数量校验代码无法工作的核心问题是错误地将int变量与数组直接进行比较,这在Java中是不允许的,而且逻辑上也没有实现“判断输入值是否在有效列表中”的功能。
原代码问题点
while(aNbrTanks <= VALID_FUEL_TANKS) 这个条件完全不合法:
- 不能将
int类型的aNbrTanks和int[]类型的VALID_FUEL_TANKS直接用<=比较,编译器会报错。 - 即使语法合法,这个条件也无法实现“校验输入是否在指定有效值中”的需求。
修正后的代码
我们需要编写逻辑检查输入的油箱数量是否存在于有效数组中,以下是两种可行的实现方式:
方式1:遍历数组判断
int aNbrVehicles = Integer.parseInt(JOptionPane.showInputDialog("Enter the number of Vehicles")); while(aNbrVehicles < 1 || aNbrVehicles > 10 ){ aNbrVehicles = Integer.parseInt(JOptionPane.showInputDialog("valid number of Vehicles")); } int[] VALID_FUEL_TANKS = {2,4,8,10,15,20}; int aNbrTanks = Integer.parseInt(JOptionPane.showInputDialog("Enter the number of Tanks")); // 校验输入是否在有效数组中 boolean isValidTankCount = false; do { // 遍历数组检查是否匹配 for (int valid : VALID_FUEL_TANKS) { if (aNbrTanks == valid) { isValidTankCount = true; break; } } // 如果无效,重新输入 if (!isValidTankCount) { aNbrTanks = Integer.parseInt(JOptionPane.showInputDialog("valid number of Tanks (must be 2,4,8,10,15,20)")); } } while (!isValidTankCount);
方式2:使用Java 8+ Stream简化判断
import java.util.Arrays; // ... int aNbrVehicles = Integer.parseInt(JOptionPane.showInputDialog("Enter the number of Vehicles")); while(aNbrVehicles < 1 || aNbrVehicles > 10 ){ aNbrVehicles = Integer.parseInt(JOptionPane.showInputDialog("valid number of Vehicles")); } int[] VALID_FUEL_TANKS = {2,4,8,10,15,20}; int aNbrTanks = Integer.parseInt(JOptionPane.showInputDialog("Enter the number of Tanks")); // 用Stream判断是否存在于有效数组 while (Arrays.stream(VALID_FUEL_TANKS).noneMatch(tank -> tank == aNbrTanks)) { aNbrTanks = Integer.parseInt(JOptionPane.showInputDialog("valid number of Tanks (must be 2,4,8,10,15,20)")); }
额外建议
原代码未处理用户输入非数字的情况(比如输入字符串),会抛出NumberFormatException。如果需要提升代码健壮性,可以用try-catch包裹Integer.parseInt的调用,捕获异常后提示用户重新输入合法数字。
内容的提问来源于stack exchange,提问作者Jared Castaneda
相关产品推荐
相关产品推荐

