> 文档中心 > Java实现万年历【升级版】

Java实现万年历【升级版】

目的:编写方法版的万年历主要是为了熟悉方法的使用,在前面用存分支循环上的一次简单改进。

可参考:Java实现万年历【初级】_Vengo€bs的博客-CSDN博客

代码部分:

import java.util.Scanner;public class Test08{/**知识点:方法版本的万年历*/public static void main(String[] args){Scanner scan = new Scanner(System.in);System.out.println("请输入年:");int year = scan.nextInt();//2022System.out.println("请输入月:");int month = scan.nextInt();//3//计算1900年~输入年的总天数int allDayOfYear = getAllDayOfYear(1900,year);//计算1月~输入月的总天数int allDayOfMonth = getAllDayOfMonth(year,1,month);//计算总天数int allDay = allDayOfYear + allDayOfMonth + 1;//计算星期int week = getWeek(allDay);//计算当月的天数int day = getDay(year,month);//打印日历printCalendar(year,month,day,week);}//计算年的总天数public static int getAllDayOfYear(int startYear,int endYear){int allDayOfYear = 0;for(int i = startYear;i<endYear;i++){if(isLeapYear(i)){allDayOfYear += 366;}else{allDayOfYear += 365;}}return allDayOfYear;}//计算月的总天数public static int getAllDayOfMonth(int year,int startMonth,int endMonth){int allDayOfMonth = 0;for(int i = startMonth;i<endMonth;i++){allDayOfMonth += getDay(year,i);}return allDayOfMonth;}//计算当月天数public static int getDay(int year,int month){int day = 0;switch(month){case 1:case 3:case 5:case 7:case 8:case 10:case 12:day = 31;break;case 4:case 6:case 9:case 11:day = 30;break;case 2:if(isLeapYear(year)){//闰年day = 29;}else{//平年day = 28;}break;}return day;}//判断闰年public static boolean isLeapYear(int year){if(year%4==0 && year%100!=0 || year%400==0){return true;}return false;}//计算星期public static int getWeek(int allDay){int week = allDay%7;if(week == 0){week = 7;}return week;}//打印日历public static void printCalendar(int year,int month,int day,int week){System.out.println(" ---" + year + "年" + month + "月--- ");System.out.println("一\t二\t三\t四\t五\t六\t日");//打印日期前的空格int num = 0;//记录是否换行for(int i = 1;i<week;i++){System.out.print("\t");num++;}//打印日期的空格for(int i = 1;i<=day;i++){num++;System.out.print(i + "\t");if(num%7 == 0){System.out.println();}}}}

运行结果:

 与实际相符