栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

编写程序:已知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();

       }

}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/314838.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号