import java.util.Random; import java.util.Scanner; public class Demo1 { public static void main(String[] args) { Scanner sc =new Scanner(System.in); System.out.println("输入年"); int year=sc.nextInt(); System.out.println("输入月"); int month=sc.nextInt(); //先判断输入年是否是闰年 int is=0;//用来标识输入年是否是闰年0表明不是,1表明是 if(year%4==0&&year%100!=0||year%400==0){ is=1; } //输入年的每月份的天数 int[] e_month=new int[]{31,0,31,30,31,30,31,31,30,31,30,31}; if(is==1) e_month[1]=29;//若为闰年二月29天,不然28天 else e_month[1]=28; /*计算所输年份距1900年1月1日(周一)的天数+所输月份距离所输 年份1月1日的天数,根据总天数得出所输月份第一天的星期*/ //所输年份距1900年1月1日(周一)的天数--使用for循环计算 int y_days=0; for(int i=1900;i<year;i++){ if(i%4==0&&i%100!=0||i%400==0){ y_days+=366; }else y_days+=365; } //计算所输月份距离所输年份1月1日的天数 int m_days=0; for(int i=1;i<month;i++){//month-1 表示假如输入5月份 要把前四个月天数相加 m_days+=e_month[i-1]; } int week=(y_days+m_days)%7+1;//输入月第一天的星期 //输出该月的日历 System.out.println("星期日"+"\t"+"星期一"+"\t"+"星期二"+"\t" +"星期三"+"\t"+"星期四"+"\t"+"星期五"+"\t"+"星期六"+"\t"); int n=0;//用来记录每7个格进行换行的标志 //输出该月开始的空白符 if(week!=7){//当第一天为周日时没有空白符 for(int i=0;i<week;i++) System.out.print("\t"); n=week; } //输出日期 for(int i=1;i<=e_month[month-1];i++){ System.out.print(i+"\t"); n++; if(n==7){ System.out.println(); n=0; } } } }