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

实现vehicles ArrayList全量入库至空的代码异常问题排查

问题分析与修复代码

你的代码目标是将vehicles列表中的所有车辆停入匹配的车库,直到列表为空,但后续循环无法继续完成停车操作,核心问题出在循环逻辑和车库更新逻辑上:

1. 车辆与车库匹配的循环逻辑漏洞

原嵌套循环中i和j的自增/自减逻辑存在错误:

  • 当车库空间与车辆空间不匹配时,直接执行i--,跳过了当前车辆匹配其他车库的可能,导致部分符合条件的车辆被遗漏
  • j的自增仅在条件不满足时触发,一旦进入特定分支会导致j停滞,无法遍历全部车库

2. 车库空间更新与车辆移除的逻辑错误

在更新车库位置和移除已停放车辆的代码块中:

  • 遍历garage.get(i).getCarry()时同步执行removeVehicles,会导致列表结构变化,后续get(j)会获取错误元素(索引错位)
  • 多次执行setCurrentSpace会将车库最终空间覆盖为最后一辆车的目的地,不符合逐个处理的预期

修复后的代码

while (!vehicles.isEmpty()) {
    // 倒序遍历vehicles,避免移除元素时索引混乱
    for (int i = vehicles.size() - 1; i >= 0; i--) {
        Vehicle currentVehicle = vehicles.get(i);
        boolean parked = false;
        
        // 遍历所有车库,尝试匹配当前车辆
        for (GarageSpace garageSpace : garage) {
            // 检查空间匹配、类型兼容、剩余容量
            if (garageSpace.getSpace() == currentVehicle.getSpace()
                && garageSpace.garageRequest(currentVehicle.getvehiclesType())
                && garageSpace.getLimit() > 0) {
                
                garageSpace.addvehicles(currentVehicle);
                vehicles.remove(i);
                parked = true;
                break;
            }
        }
        
        // 未找到车位的车辆留到下一轮循环处理
        if (!parked) {
            continue;
        }
    }

    // 更新车库位置并移除已停放车辆(避免遍历原列表时修改结构)
    for (GarageSpace garageSpace : garage) {
        List<Vehicle> parkedVehicles = new ArrayList<>(garageSpace.getCarry());
        for (Vehicle parkedCar : parkedVehicles) {
            garageSpace.setCurrentSpace(parkedCar.getDestinationSpace());
            garageSpace.removeVehicles(parkedCar);
        }
    }
}

关键修复说明

  • 匹配逻辑优化:先取出当前车辆,再遍历所有车库尝试匹配,确保每个车辆都能检查所有符合条件的车库,避免原代码的遗漏问题
  • 遍历安全处理:更新车库时先复制已停放车辆的列表,再遍历副本执行移除操作,避免原列表结构变化导致的索引错误
  • 可读性提升:使用增强for循环替代下标循环,减少索引操作带来的错误,逻辑更清晰
  • 规范判断:用!vehicles.isEmpty()替代vehicles.size() != 0,符合Java代码规范

内容的提问来源于stack exchange,提问作者Joseph Martíñez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 09:05:22