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

Java实现:筛选乘客组合以满足运输车辆安全载重余量要求

找出满足安全余量要求的乘客组合

针对需求——从给定乘客体重列表中筛选出能让500磅载重车辆留出恰好300磅安全余量的组合,我整理了对应的Java实现思路,同时也会指出原代码里的问题并给出修正版本:

需求详情

  • 车辆最大载重:500磅
  • 乘客体重列表:[130, 170, 140, 100]
  • 核心目标:找到乘客组合,使得 车辆载重 - 乘客总重量 = 300磅(即乘客总重量为200磅);若目标是匹配组合[130, 170],则对应的安全余量应为500-300=200磅

原代码分析

原代码尝试通过遍历乘客列表寻找符合条件的组合,但存在几个关键问题:

  1. resultList未初始化,调用add()方法时会触发NullPointerException
  2. 循环逻辑仅遍历相邻元素,可能遗漏非相邻的有效组合
  3. 判断条件与目标组合[130,170]不匹配(该组合总重量为300磅,对应安全余量应为200磅)

原代码如下:

// Java code
public static ArrayList<Integer> weights(int capacity, ArrayList<Integer> passangerweights) {
    ArrayList<Integer> resultList = null; // 未初始化,会引发空指针异常
    int rem_space = 300;
    List<Integer> passangerList = passangerweights;
    int[] passangerArray = new int[passangerList.size()];
    Integer[] arr = new Integer[passangerList.size()];
    arr = passangerList.toArray(arr);
    
    // looping through passanger list
    for (int psg : passangerList) {
        for (int i = 0; i < arr.length-1; i++) {
            if (capacity - (arr[i] + arr[i + 1]) == rem_space) {
                resultList.add(i, arr[i]); // 未初始化的列表调用add会报错
            } else {
                continue;
            }
        }
    }
    return resultList;
}

修正后的代码

下面是修正后的代码,解决了原代码的问题,同时支持根据需求调整目标逻辑:

import java.util.ArrayList;
import java.util.List;

public class PassengerSelector {
    public static ArrayList<Integer> findPassengerCombination(int capacity, ArrayList<Integer> passengerWeights) {
        ArrayList<Integer> resultList = new ArrayList<>();
        // 方案1:留出300磅安全余量,乘客总重量 = 500 - 300 = 200磅
        int targetTotalWeight = capacity - 300;
        
        // 方案2:匹配组合[130,170],乘客总重量为300磅,对应安全余量200磅
        // int targetTotalWeight = 300;

        // 遍历所有两两组合,确保不遗漏有效组合
        for (int i = 0; i < passengerWeights.size(); i++) {
            for (int j = i + 1; j < passengerWeights.size(); j++) {
                int weight1 = passengerWeights.get(i);
                int weight2 = passengerWeights.get(j);
                if (weight1 + weight2 == targetTotalWeight) {
                    resultList.add(weight1);
                    resultList.add(weight2);
                    // 找到一组符合条件的组合后直接返回,若需所有组合可移除此行return
                    return resultList;
                }
            }
        }
        return resultList; // 未找到符合条件的组合时返回空列表
    }

    // 测试方法
    public static void main(String[] args) {
        ArrayList<Integer> weights = new ArrayList<>();
        weights.add(130);
        weights.add(170);
        weights.add(140);
        weights.add(100);
        
        ArrayList<Integer> result = findPassengerCombination(500, weights);
        System.out.println("符合条件的乘客组合:" + result);
    }
}

代码说明

  • 提前初始化resultList,避免空指针异常
  • 采用双重循环遍历所有两两组合,而非仅相邻元素,覆盖所有可能的两人组合
  • 明确了目标总重量的计算逻辑,可根据实际需求切换方案
  • 添加了测试用的main方法,方便直接验证结果

内容的提问来源于stack exchange,提问作者G.Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:55:38