2011-11-16 1 views
0

좋아요, 제가 이전에 물어 보았던 질문의 연장입니다. 그러나 이것은 나에게 불분명 한 다음 단계입니다. 다른 모든 것들은 준비가 될 것이고이 부분은 나를 미치게 만들 것입니다! 일부 회원들은 큰 도움을 주었고 나는 그 정보로 이미 진전을 이루었습니다. 그러나 이것은 또 다른 장애물입니다.Java 일 및 예약

시작일과 종료일이있는 예약 개체를 제안합니다 (제안 된대로). 각 예약은 또한 그것과 관련된 다수의 자리를 가질 것입니다. 총 46 석 (46 석)입니다.

그래서 시스템에서 예약해야한다고 가정하고 시작일은 1 월이고 종료일은 10 번째입니다. 질문은 요청 된 전화 번호를 호스팅 할 수 있는지 여부를 알기 위해 해당 날짜 사이에 남은 자리를 어떻게 확인할 수 있습니까? 두 번째 예약이 이루어지면이 범위의 일수가 이미 46 미만이고 예약을 호스트 할 수있는 경우 가능한 한 더 감소한다는 것을 알아야합니다.

회원 중 한 분이셔서 감사 드리며 기꺼이이 예약이 기존 예약 이후인지 또는 이전 예약인지 비교하는 방법에 기꺼이 공헌했습니다. 제공되는 코드는 여기에 있습니다 : 난 그냥 매일 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; 
} 

.

감사 reallllllly 감사합니다 : D

답변

0
내가 응용 프로그램에 고유 한 데이터 구조의 유형에 Date 객체를 포장 제안

가 : 나는 당신이 당신의 비즈니스 로직에 대한 정보의 특정 유형을 생각 될 수있는 지도에 표현.

따라서 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 

을; 예약을 날짜순으로 정렬하면 도움이됩니다.

+0

이것이 내가 다른 예약의 효과를 반영 할 수있는 요일 문제와 어떻게 관련이 있는지 보지 못했습니다 ... –

+0

죄송합니다. 데이터 중심 접근 방식으로 문제를 단순화하려고했습니다. Java 코딩은 그 기간 동안 N 개의 좌석을 비우는 것을 포함합니다. 누구든지 코드로 대답 할 수 있을지 궁금합니다. –

+0

다른 데이터 중심 팁 : 좌석 및 직업에 대한 데이터 구조가 병렬 (= 중복) 일 수 있습니다. 그런 다음 Seat.isFree (Date from, Date까지)를 수행 할 수 있습니다. –