【问题标题】:Calendar Java Program: How can I condense this code?日历 Java 程序:如何压缩此代码?
【发布时间】:2020-01-11 05:06:47
【问题描述】:

我正在开发一种方法,该方法返回对应于一年中第一天的星期几的整数。 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;

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

【问题讨论】:

    标签: java


    【解决方案1】:

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

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

    这不仅更简洁而且更具可读性。它也更正确,因为您的代码不能正确处理闰年。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-06
      • 2022-10-15
      • 1970-01-01
      • 1970-01-01
      • 2022-01-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多