Java-输出日历表

如图打印如下日历图片


有兴趣的话,建议读者构建一个思维导图,以方便生成解决方案


/*

  *  To  change  this  license  header, choose  License  Headers in  Project  Properties.

  *  To  change  this  template  file,  choose  Tools  |  Templates

  *  and  open  the  template  in  the  editor.

  */

package  printcalendar;

 

import  java.util.Scanner;

 

/**

  *

  *  @author Hacker.ST.Tan

*/

public  class  PrintCalendar  {

 

        /**

          *  @param args  the  command line  arguments

          */

        public  static  void  main(String[] args)  {

               //  TODO  code  application  logic  here

               Scanner  input  =  new  Scanner(System.in);

               System.out.print("Enter  full  year  (e.g., 2017):");

               int year  =  input.nextInt();

               System.out.print("Enter  month  as  a  number  between 1  and  12:");

               int month  =  input.nextInt();

               print12(year,  month);

        }

        //打印至month開始之後的所有月份的日曆

        public  static  void  print12(int  year, int  month) {

               for (int month1  =  month; month1  <=  12;  ++month1)  {

                        printMonth(year,  month1);

               }

        }

        //答應日曆函數

        public  static  void  printMonth(int  year, int  month) {

                printMonthTitle(year,  month);

               printMonthBody(year,  month);

        }

        //打印標題

        public  static  void  printMonthTitle(int  year, int  month) {

               System.out.println("                    "  +  getMonthName(month)  + "  "  +  year);

               System.out.println("-----------------------------");

               System.out.println("  Sun  Mon  Tue  Wed  Thu  Fri  Sat");

        }

        //確定輸入的月份

        public  static  String getMonthName(int month)  {

               String  monthName  =  "";

               switch (month)  {

                        case  1:

                                monthName =  "January";

                                break;

                        case  2:

                                monthName  =  "February";

                                break;

                        case  3:

                                monthName  =  "March";

                                break;

                        case  4:

                                monthName  =  "April";

                                break;

                        case  5:

                                monthName  =  "May";

                                break;

                        case  6:

                                monthName  =  "June";

                                break;

                        case  7:

                                monthName  =  "July";

                                break;

                        case  8:

                                monthName  =  "August";

                                break;

                        case  9:

                                monthName  =  "September";

                                break;

                        case  10:

                                monthName  =  "October";

                                break;

                        case  11:

                                monthName  =  "November";

                                break;

                        case  12:

                               monthName  =  "December";

               }

               return monthName;

        }

        //打印日曆的主體

        public  static  void  printMonthBody(int  year, int  month) {

               int startDay  =  getStartDay(year,  month);

               int numberOfDaysInMonth  =  getNumberOfDaysInMonth(year,  month);

               int i  =  0;

               for (i  =  0;  i  <  startDay;  ++i)  {

                        System.out.print("        ");

               }

               for (i  =  1;  i  <=  numberOfDaysInMonth;  ++i)  {

                        System.out.printf("%4d",  i);

                        if  ((i  +  startDay) %  7  ==  0)  {

                                System.out.println();

                        }

               }

               System.out.println();

        }

 

        public  static  int  getStartDay(int  year, int  month) {

               final int START_DAY_FOR_JAN_1_1800  =  3;//1800/1/1是星期三

               int totalNumberOfDays  =  getTotalNumberOfDays(year,  month);

                return  (totalNumberOfDays  +  START_DAY_FOR_JAN_1_1800)  %  7;

        }

        //獲得1800/1/1距今日是多少天,因為已知18001/1是星期三

        public  static  int  getTotalNumberOfDays(int  year, int  month) {

               int total  =  0;

               for (int i  =  1800;  i  <  year;  ++i)  {

                        if  (isLeapYear(i))  {

                                total  =  total  +  366;

                        }  else  {

                                total  =  total  +  365;

                        }

               }

               for (int i  =  1;  i  <  month;  ++i)  {

                        total  =  total  +  getNumberOfDaysInMonth(year,  i);

               }

               return total;

        }

        //獲得month的天數,即month31天還是30天,還是2928

        public  static  int  getNumberOfDaysInMonth(int  year, int  month) {

               if (month  ==  1  ||  month  ==  3  ||  month  ==  5  ||  month  ==  7  ||  month  ==  8  ||  month  ==  10  ||  month  ==  12)  {

                       return  31;

               }

               if (month  ==  4  ||  month  ==  6  ||  month  ==  9  ||  month  ==  11)  {

                        return  30;

               }

               if (month  ==  2)  {

                        return  isLeapYear(year)  ?  29  :  28;

               }

               return 0;

        }

        //判斷是否為閏年

        public  static  boolean isLeapYear(int year)  {

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

        }

}

猜你喜欢

转载自blog.csdn.net/ricardomtan/article/details/71308322