我必须创建一种算法,该算法需要将 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
用行李箱填充容器有两条规则:
我的最终目标是打印每个容器的袋子重量列表。行李箱示例字符串的示例输出将是:
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);
}
}
答案 0 :(得分:0)
我建议您创建一个Container
类,其中包含两个字段:List<Integer> container
和int currentWeight
,然后boolean add(Integer luggage)
相应地返回boolean
值,如果行李箱是否插入。然后,如果可以插入行李,您可以根据情况增加List<Container> containers
。
在代码中:
class Container {
private static final int MAX_SIZE = 50;
private List<Integer> container;
private int currentWeight;
//luggage should be of type Luggage as well, just using Integer for sample purposes
public boolean add(Integer luggage) {
//implement it accordingly...
}
}
class Bags {
List<Container> containerList;
//again, it should be List<Luggage>, just for sample purposes
public void process(List<Integer> luggage) {
//implement accordingly...
}
}
实施细节由您决定。
答案 1 :(得分:0)
使用迭代器的经典示例。
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]
答案 2 :(得分:-1)
只需将每个innerbags
列表视为一个容器即可。
要打印出容器1,您需要在containerArray.get(0)
打印出行李列表。
听起来像家庭作业,所以看看是否能让你开始......