Java 我如何创建一个系统,告诉我是否还有两个给定参数的可用插槽

Java 我如何创建一个系统,告诉我是否还有两个给定参数的可用插槽,java,arrays,arraylist,multidimensional-array,Java,Arrays,Arraylist,Multidimensional Array,对于我的分配,我需要创建一个订单系统,该系统根据空闲容量分配时段。 我可以选择插槽数int numberoftimeslot和每个插槽的容量int capacityPerSlot(因此,如果我有3个插槽,每个插槽3个容量,那么总共是9个插槽) 每个客户在订单中说明其首选时间段int preferredSlot(此处:0、1或2) 在下订单之前,我需要检查他们想要的插槽中是否还有剩余容量。 如果还有剩余容量,我会给他们分配他们的首选插槽。如果没有剩余的容量,我会给他们分配一个插槽,该插槽的索引比他

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

每个客户在订单中说明其首选时间段
int preferredSlot
(此处:0、1或2)

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

这是我使用两个ArrayList的尝试:

int givenSlot=0,count=0;
公共可选添加顺序(顺序,int preferredSlot){
列表插槽=新的ArrayList();
List slotsperlot=new ArrayList();

如果((slots.size()*slotsPerSlot.size())这取决于您如何精确地建模插槽和容量。如果只需要剩余的容量,那么您只需要一个整数数组,例如
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=newslot[]{newslot(“first”,3),newslot(“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
}

在代码中,您可以检查每个插槽的可用预订数量(理想情况下,如果您有更多的预订,请缓存每个插槽的可用预订数量)。

我只需要保留剩余容量,因此不需要额外的类(这是不允许的).我最大的问题是,容量和插槽的数量不是设置的变量..所以我可以有一个带有{1,1}或{1,1,1}或{3,3}的数组,我不知道如何在需要的地方增加它们。@v_ztel,使用
int[]
对于描述可用容量的元素,这应该不是什么大问题。我假设您使用用户输入来获取插槽数量和每个插槽的容量(都一样?),因此类似于
int[]slots=new int[numberOfSlots];for(int I=0;I
应该可以工作(如果用户需要输入每个插槽的容量,只需在环路内请求额外的输入即可)。