因此,我目前正在開發一個函式來檢查給定LocalTime值是否在范圍內。一切都很好,相當于LocalDateTime沒有問題的作品。
所以,我的代碼現在看起來像這樣:
public boolean isInRange(LocalTime time){
return (time.isAfter(roundedStartTime.toLocalTime())) || time.equals(roundedStartTime.toLocalTime()) &&
time.isBefore(roundedEndTime.toLocalTime());
}
它有一些關于我的業務邏輯的細節,但這不是問題的一部分。我還有附帶的 junit 測驗,用于檢查邏輯是否按預期作業。同樣,該inRange(LocalDateTime time)功能完美運行。
但是使用我的測驗,在我用于 LocalDateTime驗證的同時,它們失敗了,因為它們以某種方式回傳 true。我已經開始除錯,不敢相信我的眼睛,這解釋了true && false檢查:

無論出于何種原因,分別評估這兩個陳述句會顯示預期的行為,但將它們組合起來會回傳 true。
uj5u.com熱心網友回復:
你的功能
public boolean isInRange(LocalTime time){
return (time.isAfter(roundedStartTime.toLocalTime())) || time.equals(roundedStartTime.toLocalTime()) &&
time.isBefore(roundedEndTime.toLocalTime());
}
正在檢查是否
time在之后roundedStartTime或者
timeequalsroundedStartTime和
time在之前roundedEndTime
查看Java 運算子優先級表,我們可以得出&&優先級為4的結論,而||優先級為3的優先級。因此,您的條件是檢查(時間等于 roundedStartTime 且在 roundedEndTime 之前)或(時間在 roundedStartTime 之后)。
所以,當你time在 afterroundedStartTime和 after 之后roundedEndTime,也就是說,它晚于整個范圍,條件仍然會被評估為真,因為第一個運算元被||評估為真。要修復它,您需要將括號括起來||,這樣您的邏輯運算式將計算為
(時間 >= roundedStartTime)和(時間 < roundedEndTime)
使固定:
public boolean isInRange(LocalTime time){
return ((time.isAfter(roundedStartTime.toLocalTime())) || time.equals(roundedStartTime.toLocalTime())) &&
time.isBefore(roundedEndTime.toLocalTime());
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/537809.html
標籤:爪哇验证调试当地时间
上一篇:TTK物體驗證問題
下一篇:HTML地址驗證模式
