Java 哪种闰年公式是最佳选择?

Java 哪种闰年公式是最佳选择?,java,Java,我正在使用一种代码来确定一年是否是闰年。 这就是我的功能 private boolean leapYear(int year) { boolean t = false; if((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0)) t = true; return t; } 该函数工作正常,但我担心它可能有一些bug,这就是为什么我有其他选择: private boolean

我正在使用一种代码来确定一年是否是闰年。 这就是我的功能

private boolean leapYear(int year)
{
    boolean t = false;
    if((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0))
         t = true;
    return t;
}
该函数工作正常,但我担心它可能有一些bug,这就是为什么我有其他选择:

private boolean esBisiesto(int year)
{
    boolean t = false;
    if((year % 4 == 0)&&(year % 100!=0 ||(year % 100 == 0 && year % 400 == 0)))
       t = true;
    return t;
} 

但是我不知道哪一个是最好的选择,版本1是正确的。其实不需要这么多括号:

boolean leapYear = year % 4 == 0 && year % 100 != 0 || year % 400 == 0;

将正常工作

版本1正确。其实不需要这么多括号:

boolean leapYear = year % 4 == 0 && year % 100 != 0 || year % 400 == 0;

如果您不想重新发明轮子,那么它可以正常工作

,已经有了实用方法:


for(int year=1997;year如果您不希望重新发明车轮,已经有了实用方法:

for(int year=1997;year或使用Java 8:

return Year.isLeap(year);
代码是开源的:

或使用Java 8:

return Year.isLeap(year);
而且代码是开源的:

;这两种方法都将返回正确年份的正确值。如果您担心代码中存在错误,请测试它!这是获得反馈的最快方法,您希望确保该方法有效,如果您继续进行测试,您将能够确保您不会接受错误也要打破那种方法

现在的诀窍是确保表达式是正确的。对于第二种方法,真正的问题是它被过度表达了。它可以是一个更短的语句

让我们从里到外开始。另外,请注意,我只是简化了return语句,这样我们就不会进行不必要的变量赋值

boolean esBisiesto(int year) {
    return year % 4 == 0 && (year % 100 != 0 || (year % 100 == 0 && year % 400 == 0));
}
表达式
(year%100!=0 | | |(year%100==0和year%400==0))
可以重写为
year%100!=0 | | year%400==0
,因为在第二个
分支中,暗示
year%100==0
(或者我们会与第一个分支短路).

;这两种方法都将返回正确年份的正确值。如果您担心代码中存在错误,请测试它!这是获得有关您希望确保有效的方法的反馈的最快方法,并且如果您继续进行测试,您将能够确保不会意外地破坏该方法她

现在的诀窍是确保表达式是正确的。对于第二种方法,真正的问题是它被过度表达了。它可以是一个更短的语句

让我们从里到外开始。另外,请注意,我只是简化了return语句,这样我们就不会进行不必要的变量赋值

boolean esBisiesto(int year) {
    return year % 4 == 0 && (year % 100 != 0 || (year % 100 == 0 && year % 400 == 0));
}

表达式
(year%100!=0 | | |(year%100==0和year%400==0))
可以重写为
year%100!=0 | | year%400==0
,因为在第二个
分支中,暗示
year%100==0
(或者我们会与第一个分支短路).

您测试的是哪种日期?如果您只测试1901年到2099年之间的日期,那么只测试
年份%4==0
就可以了。除非日期超出此范围,否则其他条件不会生效。@laune:第二种形式怎么不正确?我对它们都进行了一些测试,从这一点来看,它们似乎都是正确的。@Makoto您可以看到im第二种形式包含多余的年份%100==0,因为400的倍数也不可能不是100的倍数。我说第二种形式不正确是错误的,但我在
|
周围加括号是正确的。第一种形式用直截了当的形式表示规则“我完全同意它是多余的。但它绝对没有破坏任何东西。你在测试什么样的日期?如果你只测试1901年到2099年之间的日期,那么只测试
year%4==0
就可以了。除非日期超出此范围,否则其他条件不会生效。@laune:第二种形式怎么不正确?我对它们都进行了一些测试,从这一点来看,它们似乎都是正确的。@Makoto您可以立即看到,第二种形式包含多余的年份%100==0,因为不可能一个400的倍数也不是100的倍数。我说第二种形式不正确是错误的,但我说的是对的
|
周围的括号。第一种形式用一种简单的方式表达规则。@laune:我完全同意它是多余的。但它绝对没有破坏任何东西。