2 回答

TA貢獻1869條經驗 獲得超4個贊
您的 System.out.println() 命令位于 for 循環內,但位于 else 塊之外。這就是顯示所有日期的原因。
只需將這兩行移到 else 塊內,您就會得到您想要的輸出。

TA貢獻1796條經驗 獲得超4個贊
我很高興你解決了你的問題。我想補充三點。
如果您愿意,可以使用流。
您不應該在
Iterator
和 上同時調用removeList
。我對你的代碼出了什么問題的解釋。
1.您可以使用流。在 Java 9 及更高版本中最簡單:
LocalDate begin = LocalDate.of(2019, Month.SEPTEMBER, 17);
LocalDate end = LocalDate.of(2019, Month.SEPTEMBER, 24);
final Set<DayOfWeek> blockedDays = EnumSet.of(DayOfWeek.MONDAY, DayOfWeek.SATURDAY, DayOfWeek.SUNDAY);
List<LocalDate> dateList = begin.datesUntil(end.plusDays(1))
.filter(ld -> ! blockedDays.contains(ld.getDayOfWeek()))
.collect(Collectors.toList());
dateList.forEach(ld -> {
System.out.println(ld.getDayOfWeek());
System.out.println(ld);
});
輸出是:
TUESDAY
2019-09-17
WEDNESDAY
2019-09-18
THURSDAY
2019-09-19
FRIDAY
2019-09-20
TUESDAY
2019-09-24
2.不要打電話dateList.remove()。您撥打的電話iterator.remove()已將該日期從列表中刪除。所以你的調用dateList.remove()什么也不做。這是一種運氣。如果它找到要刪除的元素,則會在后續調用時Iterator拋出 a 。除非通過迭代器,否則不允許在迭代集合時修改集合,并且嘗試執行此操作的結果是未定義的。因此,請從代碼中刪除該調用。ConcurrentModificationExceptionhasNext()
3. 你的代碼出了什么問題?你的輸出看起來很有趣。對于被阻止的日子FRIDAY是與日期一起打印的,即星期幾和日期不匹配。發生的情況是:您正確設置了date列表中的日期。由于這一天是封鎖日,您執行了if該語句的一部分if,從列表中刪除了該日期。您沒有執行該else部分,因此day與上一次迭代相比沒有變化FRIDAY。if您無條件打印的語句后date,封鎖日期(依次為2019-09-21、2019-09-22和2019-09-23),以及day(FRIDAY每次)。
添加回答
舉報