2015-05-11 52 views
1

嗨我是相當新的Java,我正在處理作爲日曆工作的代碼。我以爲我已經完成了它,但日子似乎仍然是31,而不是根據if/else語句改變。這裏是代碼:爲什麼我的int值不會改變?

public int maxDaysInMonth(int year, int month) 
{ 

boolean A = (year % 4 == 0) || ((year%4==0) && (year % 100 != 0)); 

int days = 0; 
int iMonth = 0; 

if(iMonth == 4 || iMonth == 6 || iMonth == 9 || iMonth == 11) 
{ 
    days = 30; 
} 

else if (iMonth == 1 || iMonth == 3 || iMonth == 5 || iMonth == 7 || iMonth == 8 || iMonth == 10 || iMonth == 12) 
{ 
    days = 31; 
} 

if (A == true && iMonth == 2) 
{ 
    days = 29; 
} 
else if (A == false && iMonth == 2) 
{ 
    days = 28; 
} 

return days; 

} 

任何幫助非常感謝!

+0

你缺少'iMonth = month'任務 –

+0

或者只是消除'iMonth'並使用'month'來代替。 –

+1

這是一個非常好的機會,可以熟悉使用調試器。使用Java調試器,您可以在執行時逐行執行代碼,並觀察運行時值和行爲。這將允許您確定您的邏輯是否按預期工作,並具體找到它所做的事情。發生這種情況時可以看到運行時間值。哪些信息可供您用來診斷問題以及我們如何幫助您。 – David

回答

1

iMonth的用途是什麼?您將它初始化爲0,然後測試它就好像它已經代表了一個月。

你不需要iMonth;請在if測試中使用month

此外,您的閏年測定不太正確。如果年份數字可以被400整除,那麼它總是閏年。嘗試

boolean A = (year % 400 == 0) || ((year % 4 == 0) && (year % 100 != 0)); 

您可能還需要一個更具描述性的變量名,如isALeapYear

+0

感謝您的幫助。閏年信息也很有用:) – Edwards

0

可能的解決方案:

替換所有iMonthmonth - 您可以通過方法的參數提供的變量。

2.調用maxDaysInMonth(int year, int month)方法是這樣 -

maxDaysInMonth(2015, 1); // for January 
maxDaysInMonth(2015, 2); // for February 
maxDaysInMonth(2015, 11); //for December 
0

像其他已經提到了你的問題是與iMonth

嘗試使用簡單的類似的代碼:

public int maxDaysInMonth(int year, int month) { 
    int days; 
    switch (month) { 
     case 2: 
      boolean A = (year % 400 == 0) || ((year % 4 == 0) && (year % 100 != 0)); 
      days = A ? 29 : 28; 
      break; 
     case 4: 
     case 6: 
     case 9: 
     case 11: 
      days = 30; 
      break; 
     default: 
      days = 31; 
    } 
    return days; 
} 
相關問題