2013-03-14 88 views
1

該方案的指導原則遵循helper方法,並使用for循環正確

問題B:新年日期。目標:瞭解Switch結構,幫助器方法以及使用具有標記值的While循環。

您將設置一個名爲Year2012的類來處理給定月份(mm)或一個月加一天(dd)作爲整數值的日期。它具有以下get方法:1)MonthName返回一個字符串值,即本月的名稱,例如9月,6月,5月等2)DaysInMonth返回當月的天數。 3)DayOfTheYear返回序號年份日期(數字在1-365之間,通常稱爲Julian日期)。提示,使用for循環添加每個前一個月的日期,然後添加當前月份的日期。 4)DayOfWeek,它返回一個字符串值,它是當天的名字,例如星期一,星期二等。

其中一些方法可以用作其他方法的'幫手'方法。所有方法將直接或間接使用switch語句。每種方法都會根據發送給它的值來計算返回值,因此不存在類屬性,只有默認的構造函數。所有的邏輯必須包含在你自己的方法中。 (也就是說,你不會爲你的邏輯使用現有的API類)。 設計一個測試應用程序,詢問用戶一個月和一天,然後顯示月份的名稱,月份的天數,這一天的這一週,以及這一天的朱利安日期。編寫程序以使用While循環處理日期,直到輸入標記值。多次運行程序以測試不同日期,但使用以下五個日期進行最終運行:Jan.1,Apr.18,Aug.2,Nov.28,& Dec.15。

我遇到了這個程序的某些部分的麻煩。具體使用Julian日期方法和dayofTheWeek方法。 Julian日期不斷打印出1(我還沒有測試過很多日期),並且是dayofTheWeek方法的輔助方法,您可以查看我的代碼並查看我的問題是什麼?

public String monthName(int month) 
    { 
     String mon = null; 
     switch (month) 
     { 
      case 1: 
       mon = "January"; 
       break; 
      case 2: 
       mon = "February"; 
       break; 
      case 3: 
       mon = "March"; 
       break; 
      case 4: 
       mon = "April"; 
       break; 
      case 5: 
       mon = "May"; 
       break; 
      case 6: 
       mon = "June"; 
       break; 
      case 7: 
       mon = "July"; 
       break; 
      case 8: 
       mon = "August"; 
       break; 
      case 9: 
       mon = "September"; 
       break; 
      case 10: 
       mon = "October"; 
       break; 
      case 11: 
       mon = "November"; 
       break; 
      case 12: 
       mon = "December"; 
       break; 
      default: 
       mon = "Inccorect entry"; 
       break; 
     } 
     return mon; 
    } 

    public int daysInMonth(int month) 
    { 
     int days = 0; 
     switch (month) 
     { 
      case 1: 
       days = 31; 
       break; 
      case 2: 
       days = 28; 
       break; 
      case 3: 
       days = 31; 
       break; 
      case 4: 
       days = 30; 
       break; 
      case 5: 
       days = 31; 
       break; 
      case 6: 
       days = 30; 
       break; 
      case 7: 
       days = 31; 
       break; 
      case 8: 
       days = 31; 
       break; 
      case 9: 
       days = 30; 
       break; 
      case 10: 
       days = 31; 
       break; 
      case 11: 
       days = 30; 
       break; 
      case 12: 
       days = 31; 
       break; 
      default: 
       days = 0; 
     } 
     return days; 
    } 

    public int dayOfTheYear(int month, int day) 
    { 
     int julian = 0; 
     for (int count = 1; count == month; count++) 
     { 
      julian += daysInMonth(count); 
     } 
     return julian; 
    } 

    public String dayOfWeek(int month, int day) 
    { 
     int daysSoFar = dayOfTheYear(month, day); 
     int weekDay = daysSoFar % 7; 
     String dayName = null; 

     switch (weekDay) 
     { 
      case 1: 
       dayName = "Sunday"; 
       break; 
      case 2: 
       dayName = "Monday"; 
       break; 
      case 3: 
       dayName = "Tuesday"; 
       break; 
      case 4: 
       dayName = "Wednesday"; 
       break; 
      case 5: 
       dayName = "Thursday"; 
       break; 
      case 6: 
       dayName = "Friday"; 
       break; 
      case 7: 
       dayName = "Saturday"; 
       break; 
      default: 
       dayName = "Incorrect entry"; 
     } 
     return dayName;  
    } 

    public static void main(String[] args) 
    { 
     Scanner keyboard = new Scanner(System.in); 
     Year2012 year = new Year2012(); 
     System.out.println("Please enter a month using integers (Jan = 1): "); 
     int month = keyboard.nextInt(); 
     System.out.println("Please enter a day within that month: "); 
     int day = keyboard.nextInt(); 

     System.out.println("Month: " + year.monthName(month)); 
     System.out.println("Number of days in month: " + year.daysInMonth(month)); 
     System.out.println("Day of the week: " + year.dayOfWeek(month, day)); 
     System.out.println("Julian date: " + year.dayOfTheYear(month, day)); 

    } 
} 
+0

@jzworkman:請不要將標籤「作業」添加到問題中;它已經過時並正在被刪除。 – geoffspear 2013-03-14 18:46:53

+0

@Wooble我不知道,直到它被刪除我怎麼知道這一點?有沒有討論爲什麼這是在某個地方完成的?我知道社區不願直接爲人做功課,所以我很好奇這將如何進行下去。 – jzworkman 2013-03-18 15:11:25

+0

@jzworkman:http://meta.stackexchange.com/questions/147100/trogdor-ate-my-homework-tag(它也在標籤的wiki標籤中)。當你去添加標籤時,它應該彈出提到它已經過時的描述。 – geoffspear 2013-03-18 15:13:29

回答

3

你在設置茱莉安值的for循環中弄錯了。試試這個:

int julian = 0; 
for (int count = 1; count < month; count++) 
{ 
julian += daysInMonth(count); 
} 
return julian + day; 

這個循環使用<個月而不是計數==月計數。它還會返回朱連+日

2

你的循環條件是count == month

public int dayOfTheYear(int month, int day) 
{ 
    int julian = 0; 
    for (int count = 1; count == month; count++) 
    { 
     julian += daysInMonth(count); 
    } 
    return julian; 
} 

這意味着當month輸入爲1,然後只有一次循環體將只執行。你的意思是count < month

+1

不要忘記添加當前月份的天數。 – Marvo 2013-03-14 17:40:53

+0

是的,這正是我的意思,比爾,謝謝!和馬爾沃,只是在我找出循環部分後再添加該部分,謝謝提醒。愚蠢的錯誤... – Matt 2013-03-14 17:43:25

+0

@ user2089277是的,Marvo是對的。如果您從當前月份開始添加日期,那麼我認爲您要使用'<而不是'<='。 – 2013-03-14 17:44:38

3

您在朱利安值計算中有幾個問題。試試這個:

public int dayOfTheYear(int month, int day) 
{ 
    int julian = 0; 
    for (int count = 1; count < month; count++) //note this loop will not run for Jan(as the logic below will cover that 
    { 
     julian += daysInMonth(count); 
    } 
    julian += day; 
    return julian; 
} 

這個循環使用計數<個月,而不是數月==,然後返回答案之前增加了天從輸入。

請注意,此循環將不會運行於Jan,因爲在這種情況下,您只需添加輸入的日期。

+0

剛剛糾正了一月份,謝謝! – Matt 2013-03-14 17:44:39