Логика бронирования не работает

1

Я реализую программу, которая создает и менеджер транспортного средства, с транспортным средством (объектами), и те объекты транспортного средства содержат объекты бронирования (с двумя строками, один для даты начала и один для даты окончания). Так что я сделал некоторые тесты бронирования, и это не Работа. Это должно быть в этом методе.

    public boolean isBookable(Booking wishedBooking) {

    boolean bookable = false;

    if ((wishedBooking.begin.compareTo(begin) != 1
            && wishedBooking.end.compareTo(begin) != 1)
            || (wishedBooking.begin.compareTo(end) != -1
                && wishedBooking.end.compareTo(end) != -1)) {
        bookable = true;
    }

    return bookable;             
}

Я попытался использовать compareTo. Даты имеют формат: ГГГГ/ММ/ДД ЧЧ: ММ

Таким образом, единственный способ, которым может быть совершена попытка, - это когда начало и конец этого рев или выше одного из брони. Если в одном случае это не так, это означает, что он не может быть забронирован, так как в один временной интервал временного интервала уже есть заказ. Я использую! =, Потому что возможно, что он может быть равен, поэтому результат будет равен 0.

Объект транспортного средства теперь повторяется с помощью метода над всеми объектами бронирования, чтобы проверить, может ли бронирование быть сделано, и его можно забронировать.

Где ошибка?

  • 0
    Вы уверены, что метод compareTo () работает с вашим форматом даты? в каком объекте вы храните даты, строку или дату?
  • 0
    Я не уверен, какова точная причина проблемы, но это может быть исправлено путем анализа дат с помощью SimpleDateFormat а затем с использованием Date.before и Date.after . Это, вероятно, также сделает ваш код более читабельным.
Показать ещё 5 комментариев
Теги:
date
iteration
compareto

1 ответ

1
Лучший ответ

Контракт a.compareTo(b) должен вернуть значение больше 0, если a "больше", чем b, значение меньше 0, если оно "меньше" или 0, если они равны. Использование 1 и -1 является чисто детализацией реализации, и вы не должны полагаться на него. То есть, ваш код должен изменить ваш код:

public boolean isBookable(Booking wishedBooking) {

    boolean bookable = false;

    if ((wishedBooking.begin.compareTo(begin) <= 0
            && wishedBooking.end.compareTo(begin) <= 0)
            || (wishedBooking.begin.compareTo(end) >= 0
                && wishedBooking.end.compareTo(end) >= 0)) {
        bookable = true;
    }

    return bookable;             
}

Обратите внимание: поскольку вы только возвращаете boolean, if может быть удален, и вы можете просто вернуть его условие:

public boolean isBookable(Booking wishedBooking) {
    return ((wishedBooking.begin.compareTo(begin) <= 0
            && wishedBooking.end.compareTo(begin) <= 0)
            || (wishedBooking.begin.compareTo(end) >= 0
                && wishedBooking.end.compareTo(end) >= 0));
}
  • 0
    Подождите, это значит, что это может быть и другое число, отличное от 1? Если он говорит, что он больше 0, значит, это может быть что-то еще, верно?
  • 0
    Боже мой, большое спасибо. Сейчас все в порядке. Какая глупая ошибка. Большое спасибо!
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню