编写程序:已知1901年1月1日为星期二,请编写一个程序,提示用户输入任意年份的数字(包括小于1901年),显示该年份1-12月的完整日历。

import java.util.Scanner;

public class Main {

       public static void main(String[] args) {

              Scanner scanner = new Scanner(System.in);

              int year = scanner.nextInt();

              int month = scanner.nextInt();

              printMonth(year, month);

       }




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

              

              printMonthTitle(year, month);

 

              int startDay = getStartDay(year, month);

 

              int numOfDaysInMonth = getNumOfDaysInMonth(year, month);

 

              printMonthBody(startDay, numOfDaysInMonth);

       }

 


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

              int startDay1901 = 2;

              if (year >= 1901) {

                     long totalNumOfDays = getTotalNumOfDays(year, month); 

                     return (int)(2+totalNumOfDays%7); 

              } else {

                     long totalNumOfDays = getTotalNumOfDaysBefore1901(year, month);

                     if (totalNumOfDays % 7 <= 2) {

                            return (int) (7-(totalNumOfDays%7));

                     } else {

                            return (int) (totalNumOfDays%7-3);

                     }

              }

 

       }




              public static long getTotalNumOfDays(int year,int month) { 

 

              long total = 0;

 

              for (int i = 1901; i < year; i++)

                     if (isLeapYear(i))

                            total = total+366;

                     else

                            total = total+365;

 

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

                     total = total + getNumOfDaysInMonth(year, i);

 

              return total;

       }




              public static long getTotalNumOfDaysBefore1901(int year,int month) { 

              long total = 0;

 

              for (int i = year + 1; i < 1901; i++)

                     if (isLeapYear(i)) 

                            total = total+366;

                     else

                            total = total+365;

 

              for (int i = month; i <= 12; i++)

                     total = total + getNumOfDaysInMonth(year, i);

 

              return total;

       }




              public static int getNumOfDaysInMonth(int year,int i) { 

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

                     return 31;

              if (i==4||i==6||i==9||i==11)

                     return 30;

              if (i==2)

                     if (isLeapYear(year))

                            return 29;

                     else

                            return 28;

              return 0;

       }

 

              

              public static boolean isLeapYear(int year) {

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

                     return true;

              return false;

       }

 


              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 = null;

 

              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 startDay,int numOfDaysInMonth) { 

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

                     System.out.print("    ");

 

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

                     if (i < 10)

                            System.out.print("   " + i);

                     else

                            System.out.print("  " + i);

 

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

                            System.out.println();

              }

              System.out.println();

       }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值