2011-11-16 74 views
0

好吧,這是我早先問過的一個問題的擴展,但這是我不清楚的下一步。其他一切都將準備就緒,這部分讓我發瘋!一些成員提供了很大的幫助,我已經在這方面取得了進展,但這只是另一個障礙。Java天與預訂

我正在創建一個會有開始日期和結束日期的預訂對象(如建議的那樣)。每個預訂也會有一些相關的座位(我需要預訂)。每天的可用座位總數46(大廳的總容量爲46個座位)。

因此,假設我在系統中進行了預訂,並且開始日期是1月1日,結束日期是10月1日。 現在的問題是,如何在範圍內檢查剩餘座位以查看是否可以託管請求的號碼?,然後當第二次預訂時,它將不得不看到在這個範圍內的日子已經少於46天,並且如果可能的話主辦預訂的時間會進一步減少。

其中一位成員,我欣賞他的努力,很樂意貢獻一種方法來比較此預訂是否在現有預訂之後或之前。提供的代碼在這裏:

public boolean overlapsWithExisting(Booking booking) { 
final Date early = booking.getStart(); 
final Date late = booking.getEnd(); 
for(Booking existing : existingBookings) { 
    if(!(early.isAfter(existing.getEnd() || late.isBefore(existing.getStart())) 
     return true; 
} 
return false; 
} 

我只是想知道如何將46與每一天關聯,並保持記錄的天數,通過預訂遞減。

感謝和reallllllly讚賞:d

回答

0

我建議包裝日期對象的數據結構類型,特定於應用程序:我相信你有一個特定類型的信息,爲您的業務邏輯可以是用Map來表示。

因此,您可以創建一個TreeMap。

TreeMap<Date,Integer> myBookings = new TreeMap<Date,Integer>(); 

並設置所有日期至46:

for(Date d : allDates) 
    myBookings.put(d,46); 

現在,當你添加一個人的房間在給定日期,您只需編輯地圖:

myBookings.put(date,myBookings.get(date)-1); 

因此,地圖數據結構包含範圍內的所有日期並存儲可用座位的數量。

+0

所有的日期,你的意思是範圍內的日期開始日期和結束日期? –

+0

和抱歉可以詳細說明myBookings.get(date)-1)部分?那天是從總數中減去1個座位嗎? –

0

在SQL一個會做下面找到阻塞的預訂:

SELECT * 
FROM bookings 
WHERE startt < :end AND endt >= :start 
LIMIT 0, 1 

這可以用Java做得太;按日期排序的預訂將有所幫助。

+0

我不明白這是如何與日間問題有關的,我可以反映其他預訂的影響... –

+0

對不起,我試圖通過以數據爲中心的方法來簡化問題。 Java中的編碼將涉及在此期間有N個空位。我想知道是否有人會用代碼來回答這個問題。 –

+0

好吧,另一個以數據爲中心的提示:可能有一個平行(=冗餘)的座位和他們的職業數據結構;然後你可以做Seat.isFree(日期從,日期到)。 –