gpt4 book ai didi

java - 每周交替

转载 作者:行者123 更新时间:2023-11-30 08:10:33 25 4
gpt4 key购买 nike

我需要在 Java 中实现一种机制,该机制每周交替一条语句,例如。在第一周,它将变量设置为 10,在第二周,它将变量设置为 15,在第三周,它再次将变量设置为 10。

这应该适用于每年。我现在尝试通过获取周数并检查它是否为偶数来对此进行归档。(date.getWeekNumber() % 2 == 0)。

这里的问题是 2014 年确实只有 52 周,而 2015 年和 2016 年确实有 53 周。这将导致 53 % 2 = 1 并且在接下来的一周内 1 % 1 = 1,在我的例子中这将设置错误的变量。

有人知道如何改进吗?

最佳答案

您需要知道每年的周数,以便确定您的条件是在奇数周还是偶数周启用。您不能只算出今年 年或去年 年的周数是偶数还是奇数,因为它基本上是累积的。

如果您只需要在有限的日期范围内(例如 2000 年到 2100 年)使用它,那么您可以只计算一个表格。如果您在非常广泛的日期范围内需要它,您可以建立一个 400 年的表格并利用每 400 年循环一次的所有内容。

更简单的示例,使用 java.time API:

例如:

private static final int MIN_YEAR_INCLUSIVE = 2000;
private static final int MAX_YEAR_EXCLUSIVE = 2100;
private static final boolean[] ENABLED_FOR_ODD_WEEKS =
buildTable(MIN_YEAR_INCLUSIVE, MAX_YEAR_EXCLUSIVE);

private static final boolean[] buildTable(int minYear, int maxYear) {
boolean[] table = new boolean[maxYear - minYear];
boolean current = true;
for (int year = minYear; year < maxYear; year++) {
table[year - minYear] = current;
Year accessor = Year.of(year);
int weeksInYear = IsoFields
.WEEK_OF_WEEK_BASED_YEAR
.rangeRefinedBy(accessor)
.getMaximum();
if (weeksInYear == 53) {
current = !current;
}
}
}

public boolean isEnabled(LocalDate date) {
int year = date.getYear();
if (year < MIN_YEAR_INCLUSIVE || year >= MAX_YEAR_EXCLUSIVE) {
throw new IllegalArgumentException("Invalid year: " + year);
}
int weekOfWeekYear = date.get(IsoFields.WEEK_OF_WEEK_BASED_YEAR);
boolean oddWeek = weekOfWeekYear % 2 == 1;
return oddWeek == ENABLED_FOR_ODD_WEEKS[year - MIN_YEAR_INCLUSIVE];
}

关于java - 每周交替,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31645701/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com