需要注意的地方
- 闰年判断
- 每月多少天,存储到一个变量里,用switch赋值
- 存储距离1900年1月1日的天数,定义一个变量sum
通关用了3个半小时,去网上查了答案,又自己研究了好久,只有百分之40的代码是自己的,感觉这种题已经有些头疼了
通关源码
import java.util.Scanner;
public class Calendar{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int year = sc.nextInt();
int month = sc.nextInt();
int day = 0; //存储一个月的天数
int sum = 0; //存储距离1900年1月1日的天数
if(year < 1900){
System.out.println("请输入大于或等于1900的年份");
}else if(month > 12 || month < 1){
System.out.println("请输入正确的月份");
}else{
System.out.println("==================================================");
System.out.println("日\t一\t二\t三\t四\t五\t六");
for (int i = 1900; i < year; i++) {
if (i % 400 == 0 || (i % 100 != 0 && i % 4 == 0)) {
sum += 366;
}else {
sum += 365;
}
}
for (int i = 1; i <= month; i++) {
switch(i){
case 4:
case 6:
case 9:
case 11:
day = 30;
break;
case 2:
if (year % 400 == 0 || (year % 100 != 0 && year % 4 == 0)){
day = 29;
}else {
day = 28;
}
break;
default:
day = 31;
}
if(i < month) //天数加到前一个月
sum += day;
}
// System.out.println(sum); //测试输出
int count = (sum + 1) % 7; //与星期一相隔几天;
// System.out.println(count); //测试输出
for (int i = 1; i <= count; i++)
System.out.print("\t"); //与星期一相差几天打印几个\t
for (int i = 1; i <= day; i++) {
System.out.printf("%d\t",i); //打印的日数
if((i + count) % 7 == 0) //控制换行
System.out.println();
}
System.out.println();
System.out.println("==================================================");
}
}
}
输出结果
题目要求
/*
接收一个年份数(大于等于1900)和一个月份数,打印出该月的日历。
日历输出格式如下:
==================================================
日 一 二 三 四 五 六
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
==================================================
其中日期上下的分隔符用的是50个=。
日期之间以及星期之间使用\t分隔。
1900年1月1日是星期1。
思路分析:
求1900年到输入年份之间的累计天数,其中闰年366天,平年365天;
求1月到输入月份之间的累计天数;
得到1900-1-1到输入年月之前所有天数,用总天数对7求余,对余数加1,该数值即为该月1号的星期;
判断输入月份有多少天;
控制格式打印日历。