我正在实施一个创建和车辆管理员的程序,车辆(对象)和那些车辆对象包含预订对象(有两个字符串,一个用于开始日期,一个用于结束日期)所以我做了一些预订测试它不起作用。必须采用这种方法。
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.
车辆对象现在使用所有预订对象的方法进行迭代,以检查是否可以预订,并且可以预订。
错误在哪里?
答案 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));
}