繁体   English   中英

日历 Java 程序:如何压缩此代码?

[英]Calendar Java Program: How can I condense this code?

我正在开发一种方法,该方法返回一个整数,该整数对应于一年中第一天的一周中的某一天。 int 0 是星期日,1 是星期一,2 是星期二,3 是星期三……6 是星期六。 方法头如下:

private static int firstDayOfYear (int year) 
{
}

我的起点是 2020 年,第一天是 2020 年 1 月 1 日的星期三。因此,2019 年从星期二开始,2018 年从星期一开始。 2021 年将于周四开始,2022 年将于周五开始。

目前,我已经在方法中创建了这段代码。 它有效,但感觉很笨拙,我觉得有一种非常有效的方法可以解决这个问题。 现在,我的代码计算距星期三的距离,并使用它来定位星期几:

int difference = year - 2020;
int distance = difference % 7;

if (distance == -6)
return 4;
if (distance == -5)
return 5;
if (distance == -4)
return 6;
if (distance == -3)
return 0;
if (distance == -2)
return 1;
if (distance == -1)
return 2;
if (distance == 0)
return 3;
if (distance == 1)
return 4;
if (distance == 2)
return 5;
if (distance == 3)
return 6;
if (distance == 4)
return 0;
if (distance == 5)
return 1;
else
return 2;

如果您对如何简化或压缩此代码有任何建议,我将不胜感激。

不要重新发明轮子。 使用 JDK 的java.time包类

return LocalDate.of(year, 1, 1).getDayOfWeek().getValue() % 7

这不仅更简洁,更易读。 这也更正确,因为您的代码没有正确处理闰年。

不过,我不会使用基于数字的非标准、晦涩的约定,而是坚持使用 DayOfWeek 枚举:

return LocalDate.of(year, 1, 1).getDayOfWeek()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM