2014-05-01 76 views
0

定義一個採用三個整數值(一個月,一天和一年)作爲參數的Java方法,並返回當年的那一天的數字(1到365之間的整數或366閏年)。你 方法應具有以下標題: 公共靜態INT daynum在(INT月,日整型,INT年) 要計算天數給定日期,使用以下公式:日期計算Java分配

一個。 dayNum = 31 *(month - 1)+ day

b。如果月份在二月(2)之後,則從dayNum減去(4 *月+23)/ 10。

c。如果年份是閏年並且日期在2月29日之後,則將1添加到dayNum。例如,考慮2000年3月2日。dayNum是31 *(3-1)+2或64. 3月在 2月之後,所以我們減去(4 * 3-23)/ 10或35/10或3(記住使用整數除法,其中 截斷餘數)。這給了我們一天的數字61.然而,2000年是閏年,而3月2日的 在2月29日之後,所以我們給dayNum加1。我們的最終答案告訴我們,2000年3月2日, 是今年的第62天。

當我測試這種方法時,我總是收到不準確的結果。如果我進入2000年3月2日它告訴我它的第64天,如果我進入第29天,它告訴我它是第57天。任何對我的代碼的修改,與我的錯誤分配和解釋的規範一起工作,將不勝感激。

public static int dayNum (int month, int day, int year) 
{ 
    int dayNum; 
    dayNum = 31 * (month - 1) + day; 

    if(month==2) 
    { 
     dayNum = dayNum - (4 * month + 23)/10; 

     if(((year % 4==0 || year % 400 == 0 && (year % 100 != 0)))&&(month>2)) 
     { 
      dayNum= dayNum + 1; 

     } 


    } 
    return dayNum; 
+0

* 「三月來月後,」 *後,但你的'if'語句只檢查二月? – MadProgrammer

+0

我不知道這是否有幫助,但部分b有(4 * 3 + 23)和c後有(4 * 3-23) – michaelp

+0

這不是失敗的原因 - 但你的閏年表達式是錯誤。 –

回答

1

「三月來2月以後」,但你的if聲明僅適用於二月檢查?

if(month==2) 

您需要檢查所有落在幾個月二月

if(month >= 3) 

if(month > 2) 
+2

編號「月份在二月之後」。應該是'if(month> 2)' –

+0

@davidwallace是的,誤讀 – MadProgrammer