JAVA基本语句实现打印日历

已知1900年1月1日是星期一,要求打印输入年月的日历。

输出结果格式:

日    一    二    三    四    五    六
                                          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

思路分析:

  1. 对1900年到输入年份之间的天数进行累加求和,闰年366天,平年365天。
  2. 对输入月份之间的月份天数进行累加求和
  3. 得到1900-1-1到输入年月之前所有天数,对总天数模7运算,即对7求余,加1之后即为该月1号的星期
  4. 计算输入月份有多少天
  5. 控制格式打印日历

参考源码如下:


import java.util.Scanner;

//运行这段代码记得修改类名和包名
public class HomeWork {

    /*
     * @ 利用简单的for,switch,if语句实现打印输入年月的月份表 。
     * 
     * @ 该程序只做练习用,不考虑非法输入情况
     */
    public static void main(String[] args) {

	int date = 0; // 存放输入的年月后计算得到的1号的星期
	int day_max = 0;// 存放输入的年月的月的天数

	int year = 0;// 用来保存输入的年份
	int month = 0;// 用来保存输入的月份

	Scanner in = new Scanner(System.in);
	System.out.print("请输入年份:");
	year = in.nextInt();
	System.out.print("请输入月份:");
	month = in.nextInt();
	System.out.println("输入的日期为:" + year + "-" + month);
	in.close();

	int day_sum = 0;
	// 对1900~year之间的年份进行累加天数
	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

	// 对月份进行累加计算
	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;
	    }
	} // for

	date = 1 + day_sum % 7; // 存放输入的日期计算得到的星期,1900年1月1日星期一
	System.out.println("输入的日期为:" + year + "-" + month + ",这个月的1号是星期" + date);
	// 如果是星期日,开头则 不用空出来距离
	// 此处之后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("==================================================");
    }

}

运行结果:

运行结果

猜你喜欢

转载自blog.csdn.net/qq_36305530/article/details/81215976
今日推荐