import java.util.Scanner; public class year { public static void main(String[] args) { int daysOfMonth=0; //记录输入日期的那个月有多少天 int daysOfMonths=0; //记录输入日期距离输入年份第一天有多少天 int daysOfYears=0; //记录输入日期的那个月的1号距离1900年1月1号多少天 int month=0; //记录距离输入的月份 int year=0; //记录距离输入的年份 System.out.println("**********************欢迎使用万年历*************************"); Scanner sc =new Scanner(System.in); System.out.println("请输入年份:"); year=sc.nextInt(); System.out.println("请输入月份:"); month=sc.nextInt(); boolean isRun=year%400==0||year%4==0&&year%100!=0;//输入年份是否为闰年 switch(month){ case 2: if(isRun){ daysOfMonth=29; } else{ daysOfMonth=28; } break; case 4: case 6: case 9: case 11: daysOfMonth=30; break; default: daysOfMonth=31; } for(int i=1;i<month;i++)//计算输入日期距离输入年份第一天多少天 { switch(i){ case 2: if(isRun){ daysOfMonths+=29; } else{ daysOfMonths+=28; } break; case 4: case 6: case 9: case 11: daysOfMonths+=30; break; // case 1: // case 3: // case 5: // case 7: // case 8: // case 10: // case 12: default : daysOfMonths+=31; } } for(int i=1900;i<year;i++)//计算输入年份距离1900年1月1日多少天 { //!!!!!年份一直再改变,定义时要小心 if(i % 4 == 0 && i % 100 != 0 || i % 400 == 0) { daysOfYears+=366; } else{ daysOfYears+=365; } } daysOfYears+=daysOfMonths;//daysOfYears现在的值为输入日期的那个月的一号距离1900年1月1日多少天 int xqj=1+daysOfYears%7; //计算输入月份的第一天是星期几 //开始按照格式输出该日历 System.out.println(xqj); System.out.println(daysOfYears-31); System.out.println("\n星期日\t"+"星期一\t"+"星期二\t"+"星期三\t"+"星期四\t"+"星期五\t"+"星期六"); for(int i=0;i<xqj;i++) { if(xqj==7) continue; System.out.print("\t"); } int temp=xqj;//用于计算什么时候换行,什么时候是输出制表符 for(int i=1;i<=daysOfMonth;i++){ temp++; if(temp%7==0) { System.out.print(i+"\n"); } else{ System.out.print(i+"\t"); } } } }