2016-11-24 134 views
-1

我有一個任務需要創建一個Java控制檯應用程序,它涉及到要求用戶輸入日期,解析該日期以及確定該日期從哪一天開始。我必須再打印出的日曆,看起來像這樣:如何在控制檯中打印日曆月份?

Calendar for September 2016 
Su Mo Tu We Th Fr Sa 
- - - - 1 2 3 
4 5 6 7 8 9 10 
11 12 13 14 15 16 17 
18 19 20 21 22 23 24 
25 26 27 28 29 30 - 

我有約會,我有一天數的日期開始日(如天= 1(星期一),天= 2(星期二)等)

現在,我可以使用一個非常凌亂的外觀if語句的嵌套if語句,根據Day的值和當月天數打印出這個pre自制的日曆,我可以預先爲每個日期和當月的天數組合預先製作一個日曆。但我不想那樣做,我也找不到一個更簡單的方法。有沒有人有過更簡潔,更簡潔的方法?會涉及二維數組嗎?

PS。我不被允許使用Java中的任何基於日期的庫類。

+0

使用「我不允許使用在Java中使用任何基於日期的庫類。」那麼你如何制定給定月份的開始日期? –

+0

如何在沒有日期庫的情況下知道當月的哪一天開始? –

+0

沒有內置的java類,沒有更簡單的方法。你如何看待它在內置的java類中實現?你必須使用你的雜亂開關和if語句。此外,你應該保留一個方法來檢查閏年 – rafid059

回答

0

好,你可以,如果你改變主意

public static void main(String args []) 
    { 

     // type MM yyyy 
     Scanner in = new Scanner(System.in); 
     System.out.print("Enter month and year: MM yyyy "); 
     int month = in.nextInt(); 
     int year = in.nextInt(); 
     in.close(); 
     // checks valid month 
     try { 

      if (month < 1 || month > 12) 
       throw new Exception("Invalid index for month: " + month); 
      printCalendarMonthYear(month, year);} 

     catch (Exception e) { 
      System.err.println(e.getMessage()); 
     } 
    } 

    private static void printCalendarMonthYear(int month, int year) { 
     Calendar cal = new GregorianCalendar(); 
     cal.clear(); 
     cal.set(year, month - 1, 1); // setting the calendar to the month and year provided as parameters 
     System.out.println("Calendar for "+ cal.getDisplayName(Calendar.MONTH, Calendar.LONG, 
         Locale.US) + " " + cal.get(Calendar.YEAR));//to print Calendar for month and year 
     int firstWeekdayOfMonth = cal.get(Calendar.DAY_OF_WEEK);//which weekday was the first in month 
     int numberOfMonthDays = cal.getActualMaximum(Calendar.DAY_OF_MONTH); //lengh of days in a month 
     printCalendar(numberOfMonthDays, firstWeekdayOfMonth); 
    } 
    private static void printCalendar(int numberOfMonthDays, int firstWeekdayOfMonth) { 
     int weekdayIndex = 0; 
     System.out.println("Su MO Tu We Th Fr Sa"); // The order of days depends on your calendar 

     for (int day = 1; day < firstWeekdayOfMonth; day++) { 
      System.out.print(" "); //this loop to print the first day in his correct place 
      weekdayIndex++; 
     } 
     for (int day = 1; day <= numberOfMonthDays; day++) { 

      if (day<10) // this is just for better visialising because unit number take less space of course than 2 
      System.out.print(day+" "); 
      else System.out.print(day); 
      weekdayIndex++; 
      if (weekdayIndex == 7) { 
       weekdayIndex = 0; 
       System.out.println(); 
      } else { 
       System.out.print(" "); 
      }}} 
+2

請解釋你的答案。否則,這對該網站的未來訪問者不利。所有你會做的是勺餵養OP,並剝奪他創建自己的代碼的好處。 –

+0

OP不允許使用任何內置的基於日期的類。然而你在你的答案中使用了'GregorianCalendar' – rafid059

相關問題