你好,我目前只停留在一个课程上,我需要这样做,所以NFTLPAddBox方法循环通过以前的卡车和堆栈,在创建一辆新卡车之前添加盒子,所以它就像第一个适合算法。我如何循环通过以前的卡车和堆栈来检查空间?感谢
public class Truck {
public static final int TRUCK_WIDTH = 2000;
public static final int TRUCK_HEIGHT = 1000;
public static final int BOX_LIMIT = 100;
public int boxNum = 0;
private List<Stack> stack;
public class TLP {
private Box[] boxes;
private List<Truck> trucks = new ArrayList<Truck>();
public void NFTLP() {
trucks.clear();
trucks.add(new Truck());
System.out.println("");
Stack s = new Stack();
s.setStackWidth(boxes[0].getWidth());
trucks.get(0).addStack(s);
for (int i = 0; i < boxes.length; i++) {
NFTLPAddBox(boxes[i],
trucks.get(trucks.size() - 1).getStack().get(trucks.get(trucks.size() - 1).getStack().size() - 1),
trucks.get(trucks.size() - 1), i);
}
System.out.println("Trucks used: " + trucks.size());
System.out.println("Stacks used: " + Truck.stacks);
}
// next fit algorithm
public void NFTLPAddBox(Box b, Stack s, Truck t, int i) {
i++;
// add box to stack
if (t.getBoxNum() < Truck.BOX_LIMIT) {
if (b.getWidth() <= s.getStackWidth() && s.getStackHeight() + b.getHeight() <= Truck.TRUCK_HEIGHT) {
s.addBox(b);
t.boxNum++;
System.out.println("Box " + i + " added at Truck: " + trucks.indexOf(t) + " Stack: "
+ Integer.toString(trucks.get(trucks.indexOf(t)).getStack().size() - 1));
} else {
// new stack, add box to new stack
Stack s2 = new Stack();
if (t.getCurrentStackWidth() + b.getWidth() <= Truck.TRUCK_WIDTH
&& b.getHeight() <= Truck.TRUCK_HEIGHT) {
s2.addBox(b);
t.addStack(s);
t.boxNum++;
System.out.println("Box " + i + " added at Truck: " + trucks.indexOf(t) + " Stack: "
+ Integer.toString(trucks.get(trucks.indexOf(t)).getStack().size() - 1));
}
else {
// new truck, add stack to new truck
Truck t2 = new Truck();
s2.addBox(b);
t2.addStack(s2);
t2.boxNum++;
trucks.add(t2);
System.out.println("Box " + i + " added at Truck: " + trucks.indexOf(t2) + " Stack: "
+ Integer.toString(trucks.get(trucks.indexOf(t2)).getStack().size() - 1));
}
}
} else {
// new truck, new stack
Truck t2 = new Truck();
Stack s2 = new Stack();
s2.addBox(b);
t2.addStack(s2);
t2.boxNum++;
trucks.add(t2);
}
}