Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public List<Sheet> nextFit(List<Shape> shapes) {
- /*
- * Start with an empty list of sheets (remember each sheet has a width
- * of 300 and a height of 250 as specified in the Sheet class)
- */
- List<Sheet> usedSheets = new ArrayList<Sheet>();
- /* Variables for the most recent sheet, most recent shelf and leftmost shape on the shelf */
- Sheet mrSheet = null;
- Shelf mrShelf = null;
- Shape leftShape = null;
- usedSheets.add(new Sheet());
- mrSheet = usedSheets.get(usedSheets.size()-1);
- usedSheets.get(usedSheets.size()-1).addShelf(new Shelf());
- mrShelf = mrSheet.getShelves().get(mrSheet.getShelves().size()-1);
- usedSheets.get(usedSheets.size()-1).getShelves().get(usedSheets.get(usedSheets.size()-1).getShelves().size()-1).place(shapes.get(0));
- mrSheet.updateShapeCount();
- leftShape = mrShelf.getShapes().get(0);
- /* Loops through each shape starting at index 1 */
- for (int i = 1; i < shapes.size(); i++)
- {
- /* Checks most recent sheet shape count */
- if (mrSheet.getShapeCount() < 20) {
- /* Checks most recent shelf */
- if (shapes.get(i).getHeight() <= leftShape.getHeight() && shapes.get(i).getWidth() <= (Sheet.SHEET_WIDTH - mrShelf.getWidth()))
- {
- mrShelf.place(shapes.get(i));
- mrSheet.updateShapeCount();
- }
- /* Checks rotated shape */
- else if (shapes.get(i).getWidth() <= leftShape.getHeight() && shapes.get(i).getHeight() <= (Sheet.SHEET_WIDTH - mrShelf.getWidth()))
- {
- shapes.get(i).rotate();
- mrShelf.place(shapes.get(i));
- mrSheet.updateShapeCount();
- }
- /* Checks if shelf can be created */
- else if (shapes.get(i).getHeight() <= (Sheet.SHEET_HEIGHT - mrSheet.allShelvesHeight()))
- {
- mrSheet.addShelf(new Shelf());
- mrShelf = mrSheet.getShelves().get(mrSheet.getShelves().size()-1);
- mrShelf.place(shapes.get(i));
- leftShape = mrShelf.getShapes().get(0);
- mrSheet.updateShapeCount();
- }
- /* Checks if rotated shape can do new shelf */
- else if (shapes.get(i).getWidth() <= (Sheet.SHEET_HEIGHT - mrSheet.allShelvesHeight()))
- {
- shapes.get(i).rotate();
- mrSheet.addShelf(new Shelf());
- mrShelf = mrSheet.getShelves().get(mrSheet.getShelves().size()-1);
- mrShelf.place(shapes.get(i));
- leftShape = mrShelf.getShapes().get(0);
- mrSheet.updateShapeCount();
- }
- else
- {
- usedSheets.add(new Sheet());
- mrSheet = usedSheets.get(usedSheets.size()-1);
- mrSheet.addShelf(new Shelf());
- mrShelf = mrSheet.getShelves().get(mrSheet.getShelves().size()-1);
- mrShelf.place(shapes.get(i));
- leftShape = mrShelf.getShapes().get(0);
- mrSheet.updateShapeCount();
- }
- }
- else
- {
- /* If all of the above fails, creates a new sheet and places shape */
- usedSheets.add(new Sheet());
- mrSheet = usedSheets.get(usedSheets.size()-1);
- mrSheet.addShelf(new Shelf());
- mrShelf = mrSheet.getShelves().get(mrSheet.getShelves().size()-1);
- mrShelf.place(shapes.get(i));
- mrSheet.updateShapeCount();
- }
- }
- return usedSheets;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement