Java多车辆租赁总价计算问题求助
问题解决与代码修正
你的代码存在几个核心问题,导致无法计算多辆车的租赁总价,同时输入验证逻辑也有错误,以下是修复后的完整代码及问题说明:
问题点分析
- 价格计算代码位于
for循环外部,且变量i在循环结束后已超出数组索引范围,不仅只能计算最后一辆车的价格,还会引发ArrayIndexOutOfBoundsException - 输入验证的
while循环逻辑错误:使用&&判断车型是否同时等于三个值,这永远不可能成立,导致无效车型的验证完全失效 chosenCarNames数组固定初始化长度为5,而实际需要的长度是用户输入的车辆数量,造成空间浪费numberOfCars用String数组存储车辆数量,语义不合理,应该用int变量直接存储
修复后的代码
import java.util.Scanner; public class CarRentalCalculator { public static void main(String[] args) { double totalPrice = 0; Scanner sc = new Scanner(System.in); // 获取并验证车辆数量(1-5辆) System.out.println("请输入想要租赁的车辆数量"); int carCount = sc.nextInt(); while (carCount > 5 || carCount < 1) { System.out.println("请输入1到5之间的数字,重新尝试"); carCount = sc.nextInt(); } // 初始化对应长度的车型数组 String[] chosenCarNames = new String[carCount]; sc.nextLine(); // 清除输入缓冲区的换行符 // 逐个输入车型并累加总价 for (int i = 0; i < carCount; i++) { int carIndex = i + 1; System.out.println("请输入第" + carIndex + "辆车的名称"); chosenCarNames[i] = sc.nextLine().toLowerCase(); // 统一转为小写,避免大小写问题 // 验证车型是否有效,无效则重新输入 while (!"lamborghini".equals(chosenCarNames[i]) && !"toyota".equals(chosenCarNames[i]) && !"audi 5".equals(chosenCarNames[i])) { System.out.println("第" + carIndex + "辆车的名称无效,请重新输入"); chosenCarNames[i] = sc.nextLine().toLowerCase(); } // 根据车型累加价格到总价 switch (chosenCarNames[i]) { case "lamborghini": totalPrice += 59; break; case "toyota": totalPrice += 49; break; case "audi 5": totalPrice += 39; break; } } // 输出最终总费用 System.out.println("您租赁车辆的总费用为:" + totalPrice); sc.close(); } }
关键修改说明
- 用
int carCount替代String数组存储车辆数量,语义更清晰 - 将价格计算逻辑移入
for循环内,每次输入有效车型后立即累加总价 - 修正输入验证逻辑:当车型不在允许列表时,持续提示重新输入,同时统一转为小写避免大小写敏感问题
- 调整
chosenCarNames数组长度为用户输入的实际车辆数量,优化内存使用 - 添加了车辆数量的下限验证(至少租赁1辆),完善输入逻辑
- 最终输出计算好的总费用
内容的提问来源于stack exchange,提问作者Jitheesh Justin
相关产品推荐
相关产品推荐

