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

基于键值对对比两个TreeMap的代码逻辑错误排查求助

问题分析与解决方案

问题根源

你当前的代码核心问题在于同步遍历两个Map的迭代器——这会把travelCosts里的第i个条目和travellerBalances里的第i个条目强行配对,完全没有按照travellerId(也就是Map的key)去匹配对应的数据。比如你提到的场景:travelCosts里的travellerId 2001会被和travellerBalances里的第一个条目(比如2002)的余额对比,而不是去检查travellerBalances中是否存在2001这个key,这就完全偏离了你的需求。

修正后的代码

我们只需要遍历travelCosts的所有条目,对每个travellerId直接从travellerBalances中查找对应的余额即可,同时利用泛型优化代码,避免不必要的强制类型转换:

public static void compareTravelBalance(Map<String, Integer> travelCosts, Map<String, Integer> travellerBalances) {
    // 只遍历旅行费用Map的所有条目
    for (Map.Entry<String, Integer> costEntry : travelCosts.entrySet()) {
        String travellerId = costEntry.getKey();
        int travelCost = costEntry.getValue();
        
        // 根据travellerId检查余额Map中是否存在该用户
        if (travellerBalances.containsKey(travellerId)) {
            int balance = travellerBalances.get(travellerId);
            if (travelCost > balance) {
                System.out.printf("Insufficient funds for %s: Cost: %d Balance: %d%n", travellerId, travelCost, balance);
            } else {
                System.out.printf("Approved! for: %s: Cost: %d Balance: %d%n", travellerId, travelCost, balance);
            }
        } else {
            System.out.printf("Traveller ID %s does not exist%n", travellerId);
        }
    }
}

额外优化说明

  • 用增强for循环(foreach)替代迭代器,让代码更简洁易读;
  • 使用printf格式化输出,比字符串拼接更清晰、易维护;
  • 保留泛型定义,避免了原代码中的强制类型转换,减少了运行时出错的风险。

修改后,代码会严格按照travellerId匹配对应余额,比如当travelCosts中存在2001,但travellerBalances中没有该ID时,会正确输出“Traveller ID 2001 does not exist”,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:46:29