预订逻辑不起作用

时间:2014-04-27 19:46:50

标签: java date iteration compareto

我正在实施一个创建和车辆管理员的程序,车辆(对象)和那些车辆对象包含预订对象(有两个字符串,一个用于开始日期,一个用于结束日期)所以我做了一些预订测试它不起作用。必须采用这种方法。

    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。日期的格式为:YYYY / MM / DD HH:MM

因此,尝试预订的唯一方法是,当它的开头和结尾低于或高于预订时。如果在一种情况下它不是那样的,则意味着它不能被预订,因为在该时间间隔的一个时间段,已经有预订。我正在使用!=因为它可能相等,所以结果为0.

车辆对象现在使用所有预订对象的方法进行迭代,以检查是否可以预订,并且可以预订。

错误在哪里?

1 个答案:

答案 0 :(得分:1)

如果a.compareTo(b)是"更大" a的合同将返回大于0的值。比b更小的值,如果它小于"小于"如果它们相等则为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));
}