我必须创建一个算法,它需要在n个集装箱中添加n个行李袋,每个行李袋的重量不同,每个集装箱可以容纳50公斤。每个袋子按顺序装入一个集装箱。
行李重量的示例字符串如下(每个数字代表一个行李的重量):
16 24 25 3 20 18 7 17 4 15 13 22 2 12 10 5 8 1 11 21 19 6 23 9 14
集装箱装行李有两条规则:
一个集装箱可装载不超过50(公斤)的行李
如果下一个(卸下的)袋子会导致集装箱超重,则将其放在下一个集装箱中
我的最终目标是打印每个集装箱的行李重量清单行李包示例字符串的示例输出为:

Container 1:  16  24
Container 2:  25  3  20
Container 3:  18  7  17  4
Container 4:  15  13 22
Container 5:  2   12 10  5  8  1  11
Container 6:  21  19 6
Container 7:  23  9  14

我当前的代码无法创建容器,我现在正在寻找更好的方法来实现这一点我非常感谢您的帮助:
public static void insertBagsContainer() {
    ArrayList<ArrayList<Integer>> containerArray = new ArrayList<ArrayList<Integer>>();
    int tempSum = 0;
    int x=0;

    for(int i=0; i<bags.size()-1; i++){
        tempSum = 0;
        ArrayList<Integer> innerBags = new ArrayList<Integer>();
        while (tempSum<= containerWeight){
            tempSum+= bags.get(x);
            innerBags.add(bags.get(x));
            x++;
        }
        containerArray.add(innerBags);
    }
}

最佳答案

使用迭代器的经典示例。

public static void main(String[] args) {
    int maxWeight = 50;

    ArrayList<Integer> containerWeights = new ArrayList<Integer>();
    Integer[] weights = new Integer[] { 16, 24, 25, 3, 20, 18, 7, 17, 4, 15, 13, 22, 2, 12, 10, 5, 8, 1, 11, 21, 19, 6, 23, 9, 14 };

    Iterator<Integer> itr = Arrays.asList(weights).iterator();
    int current = itr.next(); //Get the first weight
    int containerWeight = 0;

    while(itr.hasNext()) {
        if(containerWeight + current > maxWeight) {
            containerWeights.add(containerWeight);
            containerWeight = current;
        } else {
            containerWeight += current;
        }
        current = itr.next();
    }
    containerWeights.add(current);
    System.out.println(Arrays.deepToString(containerWeights.toArray()));
}

印刷品:
[40,48,46,50,49,46,14]

08-07 18:40