我需要为餐厅预订预留时间,然后看看是否有冲突…

For example - Total tables - 4
1) 9 - 11 , 3 tables
2) 9 - 10 , 1 tables (Need to do search if any table left
                       with constraint to above booking)

我如何存储时间段和表,并与其他人比较。。。
我应该使用什么数据结构。。。
如果我使用HashMap键和值,
我已经设计了所有其他类和方法,但是找不到解决时隙冲突问题的方法
collision example -

total - 4 tables

1) 9-10 , 3 tables

2) 9-11 , 1 table

3) 9-12 , 2 tables  (collision , table not available)

最佳答案

你可以简化这个问题,把可用的时间分成15分钟的块(或者其他适合你的块大小)。对于餐厅预订,我打赌15分钟街区就可以了。
然后您可以得到一个简单的int[],它存储每个时隙的预订表数。
例子:
你的餐厅从早上9点到晚上9点营业,所以12小时,每个时间段4个所以你需要一个有48个插槽的int[]现在,当您预订了9点到11点的3张桌子时,您将前8个位置(即9点到11点)增加3第二次预订将增加前4个位置1如果预订将使您的一个时隙超过可用的表限制,您知道您需要拒绝它。

final int MAX_TABLES = 4;
final int OPENING= 9;
final int CLOSING= 21;
final int SLOTS= 4;
int[] booking = new int[(CLOSING - OPENING) * SLOTS];

public void main() {
    // no tables booked
    Arrays.fill(booking,0);

    doBooking(3, 0, 8);
    doBooking(1, 4, 8);
    doBooking(1, 4, 12);
}

public void doBooking(int tables, int startSlot, int endSlot) {
    for (int slot= startSlot, slot < endSlot, slot++) {
        if (booking[slot] + tables > MAX_TABLES) {
            throw new Exception("no free table at slot "+slot);
        }
    }
    for (int slot= startSlot, slot < endSlot, slot++) {
        booking[slot] += tables;
    }
}

这应该给你个主意仍然有一些事情要做,例如正确的异常处理、从时间到插槽的转换等等。还要注意,这可能是不正确的Java代码,因为我没有测试它,也没有在GUI中编写它。

09-15 22:16