簡體   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