问题:
输入年和月,自动打印对应年月的日历。
补充知识:
1970年是Unix系统诞生的时间,所以人们把1970年定为Unix的元年,1970年1月1号是星期四。(这是计算机的一个参考值)
思路(仅供参考):
- 首先应该计算出这个月1号是星期几。要想解决1号是星期几,就得先计算出年天数,即截至这一年1月1号的天数。
- 用for循环,从1970年开始,闰年+366,平年+365;计算出月天数,即截至本月1号的天数。
- 再用for循环,从1月份开始,算出月天数;再用到闰年判断,再用switch来判断返回月天数。
- 用年天数加月天数,求得本月1号距离1970年1月1号的总天数。
- 用总天数来判断本月1号是星期几。
- 判断本月的总天数(用到switch语句)。
- 打印输出日历。
package workspace;
import java.util.Scanner;
public class calendar {
public static void main(String[] args) {
/**
* 1.先在页面版上提示输入信息 2.利用for循环判断从1970年到这一年的1月1号的总天数(润平年)。
* 3.再判断这年到该月份1号的天数,涵盖(if)润平年,确定1号星期几 4.确定这个月的天数(switch语句),然后开始打印
*/
// 信息输入
Scanner s = new Scanner(System.in);
try {
System.out.println("请输入年份:");
int year = s.nextInt();
System.out.println("请输入月份:");
int month = s.nextInt();
// 从1970.01.01开始天数累加
int daysum = 0;
for (int i = 1970; i < year; i++) {
if (i % 4 == 0 && i % 100 != 0 || i % 100 == 0 && i % 400 == 0) {
daysum += 366;
} else {
daysum += 365;
}
} // 这年到该月份1号的天数
for (int i = 0; i < month; i++) {// 常识
switch (i) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
daysum += 31;
break;
case 2:
if (year % 4 == 0 && year % 100 != 0 || year % 100 == 0 && year % 400 == 0) {// 判断润平年
daysum += 29;
} else {
daysum += 28;
}
break;
default:
daysum += 30;
break;
}
}
int zhou = 1 + daysum % 7; // 判断该月1号星期几
int max = 0;// 开始这个月的天数
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
max += 31;
break;
case 2:
if (year % 4 == 0 && year % 100 != 0 || year % 100 == 0 && year % 400 == 0) {
max += 29;
} else {
max += 28;
}
break;
default:
max += 30;
break;
}
System.out.println("**************" + year + "年 " + month + "月*************");
System.out.println("一\t二\t三\t四\t五\t六\t日");
int day = 1;
for (int i = 0; i < 5; i++) {// 一个月的跨度最多5周
for (int j = 0; j < 7; j++) {// 一周只有7天
if (i == 0 && j < zhou) {// 没有值就空着,往下写
System.out.print("\t");
continue;
}
if (day > max) {// 超过天数就终止
break;
}
System.out.print(day + "\t");
day++;//天数累加,直到月天
}
System.out.println();// 打印完一行后换行
}
} catch (Exception e) {
System.out.println("输入的年份或者月份不符合规范!!!");
}
}
输出样式:
心得
解决问题前一定要先分析问题,把大问题逐步分成小问题,理清逻辑,实现小问题的逻辑,整个问题就已经实现了百分之八十。
不畏难,不强求!