Насколько я понимаю, ваша общая логика ошибочна.Вы не можете просмотреть отдельное бронирование и определить, доступен ли номер этого бронирования на требуемый период (между 2018-12-15 и 2018-12-25).
Представьте себе:
- Номер 1 забронирован в период с 2018-12-12 по 2018-12-20.
- Номер 2 забронирован в период с 2018-12-20 по 2018-12-30 и снова между 2019-01-10.и 2019-01-17.
- Для номера 3 вообще нет заказов.
Теперь номера 1 и 2 недоступны в течение требуемого периода, но комната 3 доступна.
Когда вы повторяете свои бронирования:
- Вы просматриваете бронирование номера 1, оно перекрывается с желаемым, поэтому вы не добавляете 1 в свой список.
- Вы смотрите на первое бронирование комнаты 2, оно перекрывается, вы ничего не делаете.
- Теперь вы смотрите на второе бронирование комнаты 2. Это не накладывается, поэтому вы добавляете комнату 2 кВаш список номеров.
Больше нет бронирований, так что мы закончили.Теперь в вашем списке неверно указан номер комнаты 2. Вместо этого он должен содержать номер комнаты № 3, но его нет.
Так что в дополнение к вашим заказам вам также необходим список номеров.
Кстатипроверить, совпадает ли конкретное бронирование с желаемым периодом, просто.Я даю вам псевдокод:
if (tempEnd is before booking start) {
// no overlap
} else if (tempStart is after booking end) {
// also no overlap
} else {
// overlap
}
Это также то, что ответ exudong уже говорит.
Наконец: класс Date
, который вы используете, имеет проблемы проектирования идавно устарел.Он также (несмотря на название) не подходит для представления даты, это момент времени.Вместо этого я настоятельно рекомендую вам использовать LocalDate
из java.time, современного Java-API даты и времени.
Ссылка: Руководство по Oracle: Дата и время , объясняющее, как использовать java.time
.