2013-10-22 63 views
0

我做了一個類的日期,並在這個類位於以下聲明:爲什麼我的布爾值總是正確的?

private int year; 
private boolean leap = ((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0)); 
public boolean isLeap() {return leap;} 

然後(在不同的文件)的主要方法中:

String leapStr; 
if (dateObject.isLeap()) {leapStr = "";} 
else leapStr = "non-"; 
System.out.printf("Year %d is a %sleap year.", dateObject.getYear(), leapStr); 

所以,出於某種原因即使年份顯然不是閏年,leapStr也永遠不是「非」的。我完全不知道這個問題會是什麼。有任何想法嗎?

+0

是一年初始化?不是初始化'leap',而是在'isLeap()'中計算它,或者在構造函數中計算'leap'。 – damned

+6

您只發布一半的代碼。重要的部分不見了。你如何初始化年? –

+0

如果year沒有被初始化,它將會有值= 0,所以布爾飛躍永遠是真的,所以在初始化年份的時候粘貼完整的代碼。 – Batty

回答

2

因爲在創建對象時會計算一次跳躍的值,並且此時該年初始化爲默認值0. 您應該計算isLeap方法中的跳躍。

2

您還沒有初始化,因此今年對於int的默認值是0,這是爲什麼侑條件總是返回true(0%400 == 0)

相關問題