[英]which leap year formula is the best option?
我正在使用确定一年是否为a年的代码。 这是我所拥有的功能
private boolean leapYear(int year)
{
boolean t = false;
if((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0))
t = true;
return t;
}
该功能可以正常工作,但是我对它可能存在一些错误感到沮丧,这就是为什么我有其他选择的原因:
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;
会很好的工作
如果您不想重新发明轮子,则java.util.GregorianCalendar已经具有实用程序方法: isLeapYear(year)
for (int year = 1997; year <= 2015; year++) {
System.out.println(String.format("%d %b", year, new GregorianCalendar().isLeapYear(year)));
}
或使用Java 8:
return Year.isLeap(year);
而且代码是开源的: http : //grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8-b132/java/time/Year.java#Year.isLeap%28long%29
没有明显的数据错误 ; 两种方法都将返回正确年份的正确值。 如果您担心代码中存在错误,请对其进行测试! 这是获得您希望确定可行的方法的反馈的最快方法,而且,如果您不断进行测试,就可以确保自己也不会意外破坏该方法。
现在的技巧是确保表达式正确。 对于第二种方法,真正的问题是它被过分表达了。 它可以是一个简短的声明。
让我们从内而外开始。 另外,请注意,我只是简化了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 || year % 400 == 0
,因为在第二个or
分支中,隐含year % 100 == 0
(否则我们将与第一个分支短路)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.