目录
任务描述
本关任务:接收一个年份数和一个月份数,打印出该月的日历。
日历输出样式如下图1所示:
图1
如果输入的年份小于 1900,请输出:“请输入大于或等于1900的年份”。
注意:日期之间以及星期之间使用 \t 分隔。
编程要求
仔细阅读右侧编辑区内给出的代码框架及注释,按照提示编写程序代码。
代码展示
/*
接收一个年份数(大于等于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号的星期;
判断输入月份有多少天;
控制格式打印日历。
*/
// 请在Begin-End间编写完整代码,类名请使用Calendar
/********** Begin **********/
// 导入 Scanner 类
// 定义公开类 Calendar
// 定义主方法 main,在该方法中完成本关任务
/********** End **********/
import java.util.Scanner;
public class Calendar {
// 定义主方法 main,在该方法中完成本关任务
public static void main(String[] args) {
int year = 0;// 用来保存输入的年份
int month = 0;// 用来保存输入的月份
Scanner in = new Scanner(System.in);
year = in.nextInt();// 获取输入的年份
if(year<1900){
System.out.print("请输入大于或等于1900的年份");
System.exit(0);
}
month = in.nextInt();// 获取输入的月份
if(month>12|| month<1){
System.out.print("请输入正确的月份");
System.exit(0);
}
in.close();
int date = 0; // 存放每月1号是星期几星期
int day_max = 0;// 存放月的天数
int day_sum = 0;
// 累加从1900年到接收的年份之间的天数
for (int i = 1900; i < year; i++) {
// 判断是否是闰年
if (i % 400 == 0 || (i % 4 == 0 && i % 100 != 0)) {
// 闰年366天
day_sum += 366;
} else {
// 平年365天
day_sum += 365;
}
}
// 对月份进行累加计算
for (int i = 1; i < month; i++) {
switch (i) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
day_max = 31;
day_sum += 31;
break;
case 2:
// 判断是否是闰年
if (year % 400 == 0 || (year % 4 == 0 && (year % 100 != 0))) {
// 闰年2月29
day_sum += 29;
} else {
// 平年2月28
day_sum += 28;
}
break;
default:
day_sum += 30;
break;
}
}
date = 1 + day_sum % 7; // 存放输入的日期计算得到的星期,1900年1月1日星期一
// 如果是星期日,开头则 不用空出来距离
// 此处之后date变量表示这月1号前面制表符的个数
if (date == 7) {
date = 0;
}
// 判断这个月份多少天
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
day_max = 31;
break;
case 2:
// 判断是否是闰年
if (year % 400 == 0 || (year % 4 == 0 && (year % 100 != 0))) {
// 闰年2月29
day_max = 29;
} else {
// 平年2月28
day_max = 28;
}
break;
default:
day_max = 30;
break;
}
System.out.println("==================================================");
// 输出表头
System.out.print("日\t一\t二\t三\t四\t五\t六\n");
int day = 1;// 打印的天数
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 7; j++) {
// 打印第一行的时候,空出前date个空间
if (i == 0 && j < date) {
System.out.print("\t");
// 跳出当前次循环
continue;
}
if (day > day_max) {
break;
}
System.out.print(day + "\t");
day++;
}
// 打印完一行后换行
System.out.println();
}
System.out.println("==================================================");
}
}