问题描述
对于我在 Java9 中的第一个开发项目,我有一个问题。 我需要在 ArrayList 中插入一个包含一些信息和日期类型的对象 仅当时间不存在于 ArrayList 中并且它遵守 ArrayList 中的每个时间必须每 10 分钟存储一次的条件时。
所以,例如这个想法是这样的:
正确:[21:10,21:20,21:50,22:00]
,
不正确:[21:05,21:10,21:55,22:00]
我尝试这样的事情:
private static ArrayList<Order> orders = new ArrayList<Order>();
//ordinazione = orderTime,name,surname,adderess,pizze;
public Pizzeria() {
Order ord = new Order(name,address,num_pizze);
isValid(ord);
}
private void isValid(Order ord) {
boolean valid = false;
long prew,current;
long add = ord.getorderTime().getTime();
int min10 = 10*60*1000; //10 minutes
if(orders.size() == 0) {
addOrder(ord);
}else if(orders.size() == 1){
current = orders.get(0).getorderTime().getTime() / 1000;
if(add > current) {
if(add - current >= min10) {
valid = true;
addOrder(order);
}
}else{
if(current - add >= min10) {
valid = true;
addOrder(ord);
}
}
}else{
int i = 0;
while (orders.size() > i) {
prec = i > 1 ? orders.get(i-1).getorderTime().getTime() / 1000 : 0;
current = orders.get(i).getorderTime().getTime() / 1000;
if (current - add >= min10 && add - prec >= min10) {
valid = true;
addOrder(ord);
break;
}
i++;
}
}
if(!valid) {
System.out.println("this time is not allowed!");
}
}
public void addOrder(Orderd ord) {
orders.add(ord);
}
有什么建议吗?
解决方法
这可能不是最漂亮的解决方案,但它非常简单:每天每 10 分钟为一个订单分配一个带有插槽的数组。
首先我们需要订单数组:
<class 'float'>
<class 'float'>
<class 'float'>
<class 'float'>
<class 'float'>
现在将新订单放入订单的方法可能如下:
/** Accept an order every 10 minutes */
private static final int SLOT_SIZE_MINUTES = 10;
private Order[] orders
= new Order[Math.toIntExact(Duration.ofDays(1).toMinutes()) / SLOT_SIZE_MINUTES];
我的方法的作用:它尝试根据订单中已有的订单时间将订单放入正确的 10 分钟时段,将时间截断为 10 分钟时段。如果插槽已经被占用,它会使用循环溢出查看下一个插槽。如果所尝试的两个时隙中的任何一个是空的,它会将顺序时间设置为找到的时隙的适当时间。这也是确保时间为整点 10 分钟的原因:21:00、21:10 等,而不是 21:05。
链接
https://github.com/nodejs/node/pull/36811 解释如何使用 java.time。