You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java复活节周日计算程序:最早/最晚日期筛选功能异常

问题排查与修复

你的代码核心问题是最早/最晚日期的筛选逻辑完全颠倒,同时初始化值不符合需求,导致结果完全错误。

具体问题点

  1. 初始化值错误

    • 要找时间段内最晚的复活节,初始值应该设为LocalDate.MIN(最小日期),这样后续才能找到比它晚的日期;你现在设成了LocalDate.MAX,所有日期都比它早,永远不会更新。
    • 要找时间段内最早的复活节,初始值应该设为LocalDate.MAX(最大日期),这样后续才能找到比它早的日期;你现在设成了LocalDate.MIN,所有日期都比它晚,永远不会更新。
  2. 判断逻辑颠倒

    • 更新最晚日期时,应该判断当前复活节是否晚于当前记录的最晚日期(isAfter),你用了isBefore,导致把更早的日期当成了最晚的。
    • 更新最早日期时,应该判断当前复活节是否早于当前记录的最早日期(isBefore),你用了isAfter,导致把更晚的日期当成了最早的。

修正后的核心代码

// 修正初始化值
LocalDate spätesterOstersonntag = LocalDate.MIN;
LocalDate frühesterOstersonntag = LocalDate.MAX;

int currentYear = 2023;

for (int i = 0; i < x; i++) {
    LocalDate ostersonntag = berechneOstersonntag(currentYear + i);

    // 修正最晚日期判断逻辑
    if (ostersonntag.isAfter(spätesterOstersonntag)) {
        spätesterOstersonntag = ostersonntag;
    }

    // 修正最早日期判断逻辑
    if (ostersonntag.isBefore(frühesterOstersonntag)) {
        frühesterOstersonntag = ostersonntag;
    }
}

额外优化(可选)

如果需要输出指定格式(如2023.04.22),可以用DateTimeFormatter格式化输出:

import java.time.format.DateTimeFormatter;

// ...

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy.MM.dd");
System.out.println("Spaetester Ostersonntag: " + spätesterOstersonntag.format(formatter));
System.out.println("Fruehester Ostersonntag: " + frühesterOstersonntag.format(formatter));

验证示例

输入20时,修正后会得到正确的最早/最晚复活节日期,比如2038年的3月20日(最早)和2035年的4月21日(最晚)。

内容的提问来源于stack exchange,提问作者FlobiusKane

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 15:55:02