1、程序要求
万年历:输入一个年份,再输入一个月份,把那个月的日历打印出来;
(1900年1月1日是星期一)。
2、逻辑思路
1、根据已知条件,1900年1月1日时星期一,一周一共7天,那么我们如果得到了从
1990年到我们输入的年份之前的天数再%7,得到的余数就是经过了那么多年的目前是星期几;
2、因为日期存在闰年和平年,闰年2月29天,全年366天,平年2月28天,全年365天;
循环1900到目前的年份,在循环体里判断是不是闰年则可以得到至目前的年份之前的总天数;
3、闰年意义:四年一闰,100年不闰,400年再闰;
4、前面算出了年份,还需计算需要打印的万年历当月之前的经过了多少天;
每年的1.3.5.7.8.10.12月份固定31天;
每年的4.6.9.11固定为30天,2月则需再判断输入的那年为平年还是闰年;
再使用循环对小于输入月份的月天数进行累加到1900年到目前年份的总天数中;
此时的总天数就是1900年到目前输入的月份前一个月经过了多少天;
再%7,余数就是又经过了星期的天数;正好=0则刚好轮完n周;万年历当月从星期一的位置开始打印;
5、打印时如果用一 二 三 四 五 六 日进行排序,则按以上就正好可以对齐;
若用日 一 二 三 四 五 六 方式进行排序,因为1900年1月1日是星期1;
排在第二个数,则需(总天数+1)%7;
3、易错点
1、进行天数累计时,判断闰年需要**循环**判断到今年之前的每一年;
2、累加月份天数时,循环里如果输入的月份不等于当前遍历值且需要循环变量需
小于输入的月份才可进行累计,无后者限制,将会把总天数加至全年除了输入当月的天数和;
3、若用日 一 二 三 四 五 六 方式进行排序,因为1900年1月1日是星期1;
排在第二个数,则需(总天数+1)%7;
4、java源代码
import java.util.Scanner;
public class GetMonth{
public static void main(String[] args){
Scanner scan=new Scanner(System.in);
System.out.print("请输入您要查询的一个年份:");
int totalDays = 0;
int monthDays = 0;
int getTab = 0;
int year = scan.nextInt();
System.out.print("请输入您要查询的一个月份:");
int month = scan.nextInt();
for(int i=1900;i<year;i++){
if((i%4==0&&i%100!=0)||i%400==0){
totalDays = totalDays +366;
}else{
totalDays = totalDays +365;
}
}
for(int j=1;j<=month;j++){
switch(j){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
monthDays = 31;
break;
case 4:
case 6:
case 9:
case 11:
monthDays = 30;
break;
case 2:
if((year%4==0&&year%100!=0)||year%400==0){
monthDays = 29;
}else{
monthDays = 28;
}
break;
}
if(j!=month&&j<month){
totalDays += monthDays;
}
}
getTab = totalDays%7;
System.out.println("\t\t"+year+"年"+month+"月万年历");
System.out.println("一\t二\t三\t四\t五\t六\t日");
for(int i=0;i<getTab;i++){
System.out.print("\t");
}
for(int i=1;i<=monthDays;i++){
System.out.print(i+"\t");
if((i+getTab)%7==0){
System.out.println();
}
}
}
}
5、运行效果展示
![在这里插入图片描述](https://img-blog.csdnimg.cn/4ec5ee5e946e43609512ade324df29da.png)