求助:从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
相关产品推荐
相关产品推荐

