问题:

输入年和月,自动打印对应年月的日历。

补充知识:

1970年是Unix系统诞生的时间,所以人们把1970年定为Unix的元年,1970年1月1号是星期四。(这是计算机的一个参考值)

思路(仅供参考):

  1. 首先应该计算出这个月1号是星期几。要想解决1号是星期几,就得先计算出年天数,即截至这一年1月1号的天数。
  2. 用for循环,从1970年开始,闰年+366,平年+365;计算出月天数,即截至本月1号的天数。
  3. 再用for循环,从1月份开始,算出月天数;再用到闰年判断,再用switch来判断返回月天数。
  4. 用年天数加月天数,求得本月1号距离1970年1月1号的总天数。
  5. 用总天数来判断本月1号是星期几。
  6. 判断本月的总天数(用到switch语句)。
  7. 打印输出日历。

 

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("输入的年份或者月份不符合规范!!!");
		}
	}

 输出样式:

java 姓名输入年龄选择性别选择 java输入年份_if语句打印日历

心得

      解决问题前一定要先分析问题,把大问题逐步分成小问题,理清逻辑,实现小问题的逻辑,整个问题就已经实现了百分之八十。

不畏难,不强求!