LocalTime范围判断逻辑异常:调试结果与实际返回不符
问题分析与解决方案
你的问题出在运算符优先级上,Java中&&的优先级高于||,导致表达式被错误分组执行。
原代码本意是判断时间是否大于等于起始时间且小于结束时间,但实际执行的逻辑是:
// 错误的执行顺序:&&优先级更高,先执行后两个条件的与运算 return time.isAfter(start) || (time.equals(start) && time.isBefore(end));
这会导致只要时间在起始时间之后,哪怕已经超过结束时间,函数都会返回true,和预期的区间判断逻辑不符。
修正方案
给||的两个条件加上括号,确保先判断“大于等于起始时间”,再和“小于结束时间”的条件做与运算:
public boolean isInRange(LocalTime time){ LocalTime start = roundedStartTime.toLocalTime(); LocalTime end = roundedEndTime.toLocalTime(); return (time.isAfter(start) || time.equals(start)) && time.isBefore(end); }
简化写法
你还可以用更简洁的方式实现“大于等于起始时间”的判断——!time.isBefore(start)等价于time.equals(start) || time.isAfter(start),代码可简化为:
public boolean isInRange(LocalTime time){ LocalTime start = roundedStartTime.toLocalTime(); LocalTime end = roundedEndTime.toLocalTime(); return !time.isBefore(start) && time.isBefore(end); }
修改后,函数逻辑会和LocalDateTime版本保持一致,测试即可正常通过。
内容的提问来源于stack exchange,提问作者Ricardo
相关产品推荐
相关产品推荐

