Я застрял с этой проблемой в домашней работе в течение длительного времени, был бы признателен за вашу профессиональную помощь.Мне нужно смоделировать заполнение ракет, предназначенных для «миссии на Марс» всеми видами предметов, уже расположенных в списке массивов.Максимальный вес каждой ракеты, включая груз, равен заданному (18 000 кг), а также весу нетто ракеты (10 000 кг) и весу каждого предмета (объект Item включает в себя поля «weight» и «itemType», например «building material», «»вода "и т.д.Кажется, мои сокурсники проигнорировали эту инструкцию, поэтому их код не может помочь.
Сортировка массива в порядке возрастания / убывания по весу не решает проблему.
Моя проблема в том, что хотя яиспользовав все время циклы while, ракеты отказываются заполняться, несмотря на то, что остается место, которое можно заполнить элементом, оставшимся в списке.Цикл не пропустит следующие 2-3 элемента (самое большее, что мне удалось получить - пропустить один элемент) и не найдет один элемент, который еще можно загрузить.
Ниже также указан список элементов.
public ArrayList<U1> loadU1(ArrayList<Item> items) {
ArrayList<U1> fleetU1 = new ArrayList();
int i = 0;
Iterator<Item> iterator = items.iterator();
while (iterator.hasNext()) {
U1 rocketU1 = new U1(); // create new rocket with zero cargo
while (rocketU1.canCarry(items.get(i))) { // "canCarry" checks if item's weight fits in:
/* public final boolean canCarry(Item cargo){
if(currentRocketWeight + cargo.weight <= maxRocketWeight){
return true;
} else {
return false; }} */
rocketU1.carry(items.get(i));
// "carry" updates rocket total weight - no more than 18000 Kg including rocket net weight 10000 Kg, i.e. max cargo weight is 8000 Kg:
/* public final int carry(Item cargo){
currentRocketWeight += cargo.weight;
return currentRocketWeight;}
*/
items.remove(i); // remove loaded item from list
}
fleetU1.add(rocketU1); // add rocket to fleet
}
return fleetU1;
}
/*arraylist "items" - "phase-1.txt":
building tools=2000
building tools=2000
building tools=2000
building tools=5000
building tools=5000
building tools=2000
building tools=1000
building tools=5000
building tools=6000
shelter equipment=5000
construction equipment=5000
plants=1000
steel=8000
books=1000
water=5000*/
public ArrayList<Item> loadItems(int phaseNum) {
try {
switch (phaseNum) {
case 1:
out.println("Loading phase 1:");
fileName = "phase-1.txt";
break;
case 2:
out.println("Loading phase 2:");
fileName = "phase-2.txt";
break;
default:
out.println("argument must be 1 or 2");
}
File file = new File(fileName);
Scanner scanner = new Scanner(file);
while (scanner.hasNextLine()) {
lineFromFile = scanner.nextLine();
String[] list = lineFromFile.split("=");
Item item = new Item(); //(list[0], );
item.itemType = list[0];
item.weight = Integer.parseInt(list[1]);
itemList.add(item); // create ArrayList of items
}
scanner.close();
} catch (Exception ex) {
ex.printStackTrace();
}
return itemList;
}