如何循环列出以前的卡车

时间:2016-12-16 17:47:20

标签: java loops

你好,我目前只停留在一个课程上,我需要这样做,所以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);
    }
}

0 个答案:

没有答案