• 大小: 0.02M
    文件类型: .java
    金币: 1
    下载: 0 次
    发布日期: 2021-05-13
  • 语言: Java
  • 标签: 其他  

资源简介

LoadBox.java

资源截图

代码片段和文件信息

package cn.edu.ruc.iir.xpace.algorithm;

import com.alibaba.fastjson.JSON;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.*;


/**
 * @version V1.0
 * @Package: cn.edu.ruc.iir.xpace.algorithm
 * @ClassName: GoodsInBox
 * @Description: 商品装箱服务
 * @author: taoyouxian
 * @date: Create in 2018-09-25 13:34
 **/
public class GoodsInBox {

    private int runcount = 0;
    /* 箱子的型号盛放空间 */
    private Listject>> boxTypeList;
    /* 订单中的商品 */
    private Listject>> goodsList;
    /* 计算结果 */
    private Setject>> result = new HashSetject>>();
    /* 箱子装东西的情况,key 规则:箱型_箱子id */
    private Mapject object> boxes = new HashMapject object>();

    /**
     * 根据箱型以及订单中的商品,返回每个箱型需要箱子多少只。如果没有任何的箱子能装下某一款超大商品的时候,抛出异常
     *
     * @param boxTypeList
     * @param goodsList
     * @return
     */
    public GoodsInBox(Listject>> boxTypeList Listject>> goodsList) {
        this.boxTypeList = boxTypeList;
        this.goodsList = goodsList;
        // 开始执行
        run();
    }

    // 执行装箱
    private void run() {
        // 预先跑一遍看看,有没有特别大的东西
        double gl = 0d gw = 0d gh = 0d;
        double bl = 0d bw = 0d bh = 0d;
        int num = 0;
        for (Mapject> g : goodsList) {
            num += Integer.valueOf(g.get(“n“).toString());
            gl = Double.max(gl Double.valueOf(g.get(“l“).toString()));
            gw = Double.max(gw Double.valueOf(g.get(“w“).toString()));
            gh = Double.max(gh Double.valueOf(g.get(“h“).toString()));
        }
        for (Mapject> b : boxTypeList) {
            bl = Double.max(bl Double.valueOf(b.get(“l“).toString()));
            bw = Double.max(bw Double.valueOf(b.get(“w“).toString()));
            bh = Double.max(bh Double.valueOf(b.get(“h“).toString()));
        }
        if (gl > bl && gl > bw) {
            throw new java.lang.RuntimeException(“估算失败,存在体积过大商品,请重新选择后再试。(长度超出范围)“);
        }
        if (gw > bw && gw > bl) {
            throw new java.lang.RuntimeException(“估算失败,存在体积过大商品,请重新选择后再试。(宽度超出范围)“);
        }
        if (gh > bh) {
            throw new java.lang.RuntimeException(“估算失败,存在体积过大商品,请重新选择后再试。(高度超出范围)“);
        }
        if (num > 500) {
            throw new java.lang.RuntimeException(“估算失败,商品数量过多,请重新选择后再试。(大于500件)“);
        }

        for (final Mapject> abox : boxTypeList) {
            tryInSpance(abox/* 给一个盒子 */ new java.util.ArrayListject>>() {
                {
                    this.add(abox);
                }
            }/* 什么都没有装,盒子的空间还是这个盒子 */ false/* 已知目前这个盒子没有满 */ (goodsList)/* 急需进入盒子的商品 */ boxTypeList);
        }
    }

    /**
     * 每次测试1块空间,和全部商品,将商品依次向空间转移,放进去后产生新的3块空间, 同时商品的数量再减少,直到商品全部转移;
     *
     * @param box        一只箱子
     * @param moreSpance 这只箱子还剩余多少空间,

评论

共有 条评论