[英]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.