输出对应年份的年历(show time!!!)
第一步:输入年份
tips:记得导包哟
import java.util.Scanner;
Scanner input = new Scanner(System.in);
System.out.println("请输入年份:");
int year = input.nextInt();
第二步:计算输入年份的上一年最后一天为星期几
long total = 0,days;
for (int i = 1900; i <year; i++) {//计算输入年份之前的天数总和,记得判断闰年情况,
//1900年1月1日为周一
total += (i%4==0 && i%100!=0) || i%400==0 ? 366 : 365;
}
total = (total %=7)==6 ? -1 : total;//考虑当年第一月的第一天是周六的情况
第三步:验证输出
final String WEEK_HEAD = "日\t一\t二\t三\t四\t五\t六";//日历格式
for (int i = 1; i <=12; i++) {//按12个月份输出
System.out.println("\n["+i+"月]");
days = 31;//大月直接置31,减少switch的复杂度,提高效率
switch (i){
case 4:case 6:case 9:case 11:
days = 30;//小月天数
break;
case 2:
days = (year%4==0 && year%100!=0)|| year%400==0 ? 29:28;//闰年二月天数
break;
}
//扫描所有天数,验证周几,是否为新的一周
System.out.println(WEEK_HEAD);
//输出的是当月第一天之前的\t
for (int j = 0; j <=total ; j++) {
System.out.print("\t");
}
第四步:年历的正确输出
//当月日期输出
for (int j = 1; j <=days; j++) {
if (++total%7==0 && j!=1){
System.out.println();
}
System.out.print(j+"\t");
}
System.out.println();//每月最后一天之后换行,切换到下个月
total = (total %=7)==6 ? -1 : total;//上两句合并
//无法考虑到当年第一月的第一天是周六的情况
}