下面是“Java基础之打印万年历的简单实现(案例)”的完整攻略:
简介
本案例演示了如何使用Java打印万年历,通过计算出每个月的天数和星期几,并将其输出到控制台中。
实现步骤
第一步:输入年份
Scanner scanner = new Scanner(System.in);
System.out.print("请输入年份:");
int year = scanner.nextInt();
这里使用Scanner
类获取用户输入的年份,保存到year
变量中。
第二步:计算是否为闰年
计算公元年份 Y 是否为闰年的公式:
- Y % 4 == 0 && Y % 100 != 0
- Y % 400 == 0
boolean isLeapYear = false;
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
isLeapYear = true;
}
如果是闰年,isLeapYear
的值为 true
,否则为 false
。
第三步:输入月份
System.out.print("请输入月份:");
int month = scanner.nextInt();
这里使用Scanner
类再次获取用户输入的月份,保存到month
变量中。
第四步:计算每个月的天数
根据闰年和平年来确定每个月的天数:
- 1、3、5、7、8、10、12月为31天;
- 4、6、9、11月为30天;
- 2月平年为28天,闰年为29天。
int days = 0;
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days = 31;
break;
case 4:
case 6:
case 9:
case 11:
days = 30;
break;
case 2:
if (isLeapYear) {
days = 29;
} else {
days = 28;
}
break;
default:
break;
}
这里使用switch
语句根据用户输入的月份来计算出每个月的天数,保存到days
变量中。
第五步:计算每个月的第一天是星期几
使用蔡勒公式,计算每个月的第一天是星期几:
- W = (C / 4) - 2C + Y + (Y / 4) + (13 * (M + 1) / 5) + d - 1
- W:星期几(0~6,0表示星期日,1表示星期一,以此类推);
- C:世纪数(例如2000年属于20世纪,C=20,1900年属于19世纪,C=19);
- Y:年份(后两位);
- M:月份(3~14,3表示1月,4表示2月,以此类推);
- d:日(1~31)。
int century = year / 100;
int y = year % 100;
int monthTemp = 0;
if (month <= 2) {
monthTemp = month + 12;
y--;
} else {
monthTemp = month;
}
int week = (century / 4) - 2 * century + y + y / 4 + 13 * (monthTemp + 1) / 5 + 1;
week %= 7;
if (week < 0) {
week += 7;
}
这里用到了取模运算,将计算得到的星期数转换为0~6之间的数,0表示星期日,1表示星期一,以此类推。
第六步:打印日历
接下来,我们就可以将日历打印出来啦,下面是代码:
System.out.printf("%d年%d月\n", year, month);
System.out.println("日 一 二 三 四 五 六");
for (int i = 0; i < week; i++) {
System.out.print(" ");
}
for (int i = 1; i <= days; i++) {
System.out.printf("%2d ", i);
if ((i + week) % 7 == 0) {
System.out.println();
}
}
这里使用printf
方法来格式化输出,最后通过循环输出每一个日期。注意,这里要根据每个月的第一天是星期几来决定每个月1号前要输出多少个空格。
示例
以下是一些示例,展示了程序的输出结果:
示例一
请输入年份:2019
请输入月份:5
2019年5月
日 一 二 三 四 五 六
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 30 31
示例二
请输入年份:2000
请输入月份:2
2000年2月
日 一 二 三 四 五 六
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
以上就是本案例的完整攻略,希望对你有所帮助!
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java基础之打印万年历的简单实现(案例) - Python技术站