当前位置: 首页 > 知识库问答 >
问题:

我如何创建一个系统,告诉我是否仍然有可用的插槽,具有2个给定的参数

韦胜泫
2023-03-14

对于我的任务,我需要创建一个订单系统,该系统根据空闲容量分配时隙。我可以选择插槽数int numberoftimeslots和每个插槽的容量int capacityperslot(因此,如果我有3个插槽,每个插槽有3个容量,那么总共是9个插槽)。

每个客户在订单中说明他们的首选时隙int preferredslot(这里是0、1或2)。

我需要检查是否还有剩余的容量在他们想要的插槽,然后我才能下订单。如果有剩余的容量,我分配他们的首选插槽。如果没有剩余的容量,我会给他们分配一个下一个最低索引的插槽给他们的首选插槽。如果没有任何插槽,我将不返回任何内容。

这是我使用两个数组列表的尝试:

int givenSlot = 0, count = 0;

public Optional<Integer> addOrder(Order order, int preferredSlot) {           
List<Integer> slots = new ArrayList<Integer>();
List<Integer> slotsPerSlot = new ArrayList<Integer>();
              
                    if ((slots.size() * slotsPerSlot.size()) <= (numberOfTimeSlots * capacityPerSlot)) {
                        if (slots.contains(preferredSlot) == false) {
                            givenSlot = preferredSlot;
                            slots.add(preferredSlot);
                            slotsPerSlot.add(count);
                            count++;
                        } else if (slotsPerSlot.size() <= capacityPerSlot) {
                            givenSlot = preferredSlot;
                            slots.add(preferredSlot);
                            slotsPerSlot.add(slotsPerSlot.size() + 1);

                        } else {
                            givenSlot = slots.get(slots.lastIndexOf(count));
                        }
                        return Optional.of(givenSlot);
                    }
                    return Optional.empty();
                }

我还尝试使用带有2D数组的ArrayList:

int givenSlot = 0, count = 0;

public Optional<Integer> addOrder(Order order, int preferredSlot) { 
ArrayList<Integer> slots = new ArrayList<Integer>();
int[][] slotsPerSlot = new int[numberOfTimeSlots][capacityPerSlot];

          
                if (!slots.contains(preferredSlot)) {
                    givenSlot = preferredSlot;
                    slots.add(preferredSlot);
                    slotsPerSlot[preferredSlot] = new int[count];
                    count++;
                } else if (slotsPerSlot.length < 0) {

                }

我还试验了两个数组,即Hashmap或列表中的列表,但我总是遇到同样的问题:我不知道如何获得每个槽的每个槽容量,而这样我的代码根本无法进行。

共有1个答案

危飞文
2023-03-14

这取决于您如何准确地模拟您的插槽和容量。如果只需要剩余的容量,那么您只需要一个整数数组,例如int[]remainingCap=new int[]{3,3,3};并且每当客户占用一个插槽时,您就会递减相应的元素。在查找剩余容量时,您需要查找值>0的任何元素/插槽。

如果您需要关于插槽的更多信息,您可能需要引入一个类:

class Slot {
  private final String name;
  private final int capacity; //total capacity
  private int remainingCapacity; //what's remaining

  public Slot( String name, int cap) {
    this.name = name;
    this.capacity = cap;
    this.remainingCapacity = cap;
  }

  //add setters/getters
}

然后构建一个数组,例如Slot[]slots=new Slot[]{new Slot(“first”,3),new Slot(“second”,3),...);,并处理这些数组。

最后,如果您还需要知道谁采取了一个槽,以能够释放它,您可能需要更多的类。

示例:

class Reservation {
  private Customer customer; //who took the reservation or null 

  public boolean isAvailable() { return customer == null; }  

  //add other methods
}

class Slot {
  private Reservation[] reservations = new Reservation[numberOfSlots]; 
  //properly initialize "reservations" so that it doesn't only contain null elements
  //add other methods
}

并且在您的代码中检查每个插槽的可用保留数(理想情况下,如果您有更多的保留数,则缓存每个插槽的可用保留数)。

 类似资料:
  • 我需要写一个daymanagerr,为餐厅的订单分配时间段。 那是日间经理: 对于每一天,我可以选择可用插槽的数量和每个插槽的容量(因此,如果我选择3个插槽,每个插槽的容量为3,那么总共是9个插槽)。 每一个客户都可以在他们的订单中说明他们喜欢的时间段(这里是0、1或2)。 下面是我添加订单的类: 我需要帮助的是: 每一个新的订单,我都需要检查是否还有剩余的容量在客户首选的插槽。如果还有空位,我就

  • 问题内容: 我正在尝试创建一个,但是在方法中添加一些错误。 请帮助我如何添加参数以及如何将其传递给在其中声明a和的另一个函数。 我的另一个功能是insertData(…) 我正在尝试创建一个并将其传递给函数。但是,当我在第一个函数中调用方法时,它将引发错误。 错误是 你调用的对象是空的 问题答案: 如果不调用其构造函数(新),则不能使用任何变量(例如,参考对象),但是不能使用新变量直接对其进行初始

  • 然后,在我的测试中,我执行调用的代码。而测试就是在那条线上失败了。我做错了什么?

  • 嗨,我只是想知道有没有可能创建一个通用类来确认ObserveObject协议,它可以被多个ContentView使用。 如果我能做到这一点,那么我将能够使我的ContentView和Model类完全通用和可重用。 我希望实现的一个例子: 如果我能做到这一点,任何类都可以实现ContentViewModelType,并成为ContentView的模型,使其通用且可重用。举个例子 但是当我尝试初始化C

  • 嗨,我正在写一个程序,生成两个矩阵,然后告诉哪一个是大的。但我的问题是我不知道怎么加。程序说i和j不是在output3函数中声明的,而是在其他函数中声明的。我想我可能在格式化方面有问题,但我是新来的,所以我不太知道如何正确地编写代码。我该怎么解决这个?多谢了。

  • 问题内容: 我想绘制数据,然后创建一个新图形并绘制data2,最后回到原始绘制并绘制data3,有点像这样: 仅供参考,我如何告诉matplotlib我已经完成了一个情节?做类似的事情,但不完全相同!它不允许我访问原始图。 问题答案: 如果您发现自己定期执行此类操作,则可能值得研究matplotlib的面向对象的接口。在您的情况下: 它稍微冗长一些,但是更容易跟踪,尤其是在几个具有多个子图的图形上