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

求助:从ArrayList符合条件元素中找与常量差值最小的元素

解决思路与代码实现

我明白你的问题啦——已经能把boxCapacity大于等于目标值(这里是5)的车辆筛选出来,但不知道怎么从这些候选车里挑出容量最接近目标值的那个对吧?别担心,咱们可以在遍历过程中同时跟踪最接近的元素和最小的差值,一步步解决这个问题:

完整代码示例

public void deliver(double miles, int boxes) {
    // 初始化跟踪变量:保存最接近的车辆,以及当前最小的差值
    Car closestCar = null;
    double minDifference = Double.MAX_VALUE; // 初始设为最大的double值,确保第一个符合条件的元素能被选中

    for (int i = 0; i < cars.size(); i++) {
        Car currentCar = cars.get(i);
        int currentCapacity = currentCar.getBoxCapacity(); // 假设该方法返回int类型的容量值

        // 先筛选出容量 >= 目标boxes的车辆
        if (currentCapacity >= boxes) {
            // 计算当前容量与目标值的差值(因为>=,所以差值为非负数)
            double difference = currentCapacity - boxes;

            // 如果当前差值比记录的最小差值更小,就更新跟踪变量
            if (difference < minDifference) {
                minDifference = difference;
                closestCar = currentCar;
            }
            // 可选逻辑:如果存在多个车辆差值相同(比如两辆车容量都是5),可根据需求保留第一个/最后一个
        }
    }

    // 遍历结束后处理结果
    if (closestCar != null) {
        System.out.println("找到最接近目标容量的车辆,容量为:" + closestCar.getBoxCapacity());
        // 这里添加你需要的后续业务逻辑,比如使用该车辆执行送货操作
    } else {
        System.out.println("未找到容量大于等于" + boxes + "的车辆");
    }
}

关键逻辑说明

  • 跟踪变量初始化:closestCar初始为null,用于处理没有符合条件车辆的边界情况;minDifference初始设为Double.MAX_VALUE,确保第一个符合条件的车辆一定会被选中。
  • 差值计算与比较:因为我们只筛选boxCapacity >= boxes的元素,所以差值是currentCapacity - boxes(非负数),每次比较差值大小,保留差值最小的车辆。
  • 边界处理:最后判断closestCar是否为null,避免空指针异常,同时提示无符合条件车辆的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:14:26