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

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();
    }
}

关键修改说明

  1. 用int carCount替代String数组存储车辆数量,语义更清晰
  2. 将价格计算逻辑移入for循环内,每次输入有效车型后立即累加总价
  3. 修正输入验证逻辑:当车型不在允许列表时,持续提示重新输入,同时统一转为小写避免大小写敏感问题
  4. 调整chosenCarNames数组长度为用户输入的实际车辆数量,优化内存使用
  5. 添加了车辆数量的下限验证(至少租赁1辆),完善输入逻辑
  6. 最终输出计算好的总费用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 02:15:13