Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaFX:删除特殊的一天,同时对其进行分级_Java_Date_Javafx - Fatal编程技术网

JavaFX:删除特殊的一天,同时对其进行分级

JavaFX:删除特殊的一天,同时对其进行分级,java,date,javafx,Java,Date,Javafx,我知道,有很多例子说明如何在遍历列表时从列表中删除某些内容,但这不是重点 我正在尝试自动化一个过程,我需要记录我的工作,最终它应该打印成一个文件,比如2019年1月1日-周二。为此,我有一个带有两个日期选择器的UI。在选择两个不同的日期并进行比较之后,我知道这些日期之间有多少天 现在出现以下问题: 我正在列表中添加两个日期之间的所有天数。在那之后,我试图阻止一些特定的日子总是相同的日子:周一,周六和周日。这些日子不应该再出现在名单上了 我尝试过在遍历列表时从列表中删除值。但它没有按我预期的方式工

我知道,有很多例子说明如何在遍历列表时从列表中删除某些内容,但这不是重点

我正在尝试自动化一个过程,我需要记录我的工作,最终它应该打印成一个文件,比如2019年1月1日-周二。为此,我有一个带有两个日期选择器的UI。在选择两个不同的日期并进行比较之后,我知道这些日期之间有多少天

现在出现以下问题:

我正在列表中添加两个日期之间的所有天数。在那之后,我试图阻止一些特定的日子总是相同的日子:周一,周六和周日。这些日子不应该再出现在名单上了

我尝试过在遍历列表时从列表中删除值。但它没有按我预期的方式工作

例如:

我选择2019年9月17日作为开始,选择2019年9月24日作为结束。预期产出应为:

工作日:星期二 日期:2019-09-18 工作日:星期三 日期:2019-09-19 工作日:星期四 日期:2019-09-20 工作日:星期五 日期:2019-09-24 工作日:星期二

但如果我运行代码,输出是:

工作日:星期二 日期:2019-09-18 工作日:星期三 日期:2019-09-19 工作日:星期四 日期:2019-09-20 工作日:星期五 日期:2019-09-21 工作日:星期五 日期:2019-09-22 工作日:星期五 日期:2019-09-23 工作日:星期五 日期:2019-09-24 工作日:星期二

你可以看到。“星期六、星期日和星期一”这个词将被删除,但仍在列表中

代码:

我最终期望的是,每个星期一、星期六和星期天都应该从列表中删除,并且输出应该是正确的,如我的示例所示


谢谢

您的System.out.println命令在for循环中,但在else块之外。这就是显示所有日期的原因


只要将这两行移到else块中,就可以得到所需的输出。

我很高兴您解决了问题。我想补充三点

如果你愿意,你可以用小溪。 您不应该同时在迭代器和列表上调用remove。 我对您代码中出现错误的原因的解释。 一,。您可以使用流。在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);
    });
二,。不要调用dateList.remove。您对iterator.remove的调用已经从列表中删除了日期。因此,您对dateList.remove的调用不起任何作用。这是运气。如果找到要删除的元素,迭代器将在随后调用hasNext时抛出ConcurrentModificationException。除非通过迭代器,否则在对集合进行迭代时不允许修改集合,并且尝试修改集合的结果是未定义的。因此,从代码中删除该调用


三,。你的代码出了什么问题?你的输出看起来很有趣。对于阻止的日期,星期五与日期一起打印,即星期几与日期不匹配。发生的情况是:您正确地将日期设置为列表中的日期。由于这一天是被阻止的一天,您执行了if语句的if部分,从列表中删除了日期。您没有执行else部分,因此day与上一次迭代(星期五)相比没有变化。在您无条件打印的if声明日期之后,依次为冻结日期2019-09-21、2019-09-22和2019-09-23,每次为星期五。

谢谢。但是你能解释为什么星期一、星期六和星期天被标记为星期五吗?星期一、星期六和星期天的日期在if块中被删除。您只在else部分更改day参数,因此它们保留上一个循环Friday的值注意,开关可以使代码更易于阅读:switchdate.getDayOfWeek{case SATURDAY:case SUNDAY:case MONDAY:/*if body*/break;default:/*else body*/}此外,您可以使用==来比较枚举常量。也考虑使用RelvIF…
    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