java 动态日历的实现

java 动态日历的实现

动态日历

动态日历要求打印指定年份和指定月份的日历展示界面,可显示星期与日期信息。动态日历集合了java众多基础语法,包括数据类型、条件分支、循环语句、运算符、面向对象 、类、对象、属性、方法、封装的基础知识,所以动态日历的掌握对java入门有很大帮助。

分析

实现日历的基本思想为:确定一个基准日期,计算从基准日期到指定年份月份的前一个月的总天数,计算这个总天数的前提为判断指定年份是否是闰年(闰年是可以被400整除或者可以被4整除但不被100整除的年份),利用总天数除以7的余数可以确定当前月份前面的空格数,要想简单的使此余数为空格数,则基准日期必须为1月1日并且是星期一,大部分日历的基准日期为1900年1月1日,并且这一天是星期一,可以更简单实现动态日历。

步骤分析

  1. 判断指定年份是否是闰年
  2. 计算从1900年1月到目标年份月份的前一个月总天数
  3. 根据提供的月份获取当月总天数
  4. 获取打印当前月信息时要输出的空格数
  5. 打印日历

代码

MyCalender类

/**
 * java基础语法 数据类型、条件分支、循环语句、运算符 面向对象 类、对象、属性、方法、封装 分析:
 * 1.判断指定年份是否是闰年
 * 2.计算从1900年1月到目标年份月份的前一个月总天数
 * 3.根据提供的月份获取当月总天数
 * 4.获取打印当前月信息时要输出的空格数
 * 5.打印日历
 * @author max
 *
 */
public class MyCalender {

	private int year;// 2019
	private int month;// 7

	/** 构造器,初始化目标年份,月份 */
	public MyCalender(int y, int m) {
		year = y;
		month = m;
	}

	/** 判断指定年份是否是闰年 */
	public boolean isLeapYear(int y) {
		if (y % 400 == 0 || (y % 4 == 0 && y % 100 != 0)) {
			return true;
		}
		return false;
	}

	/** 计算从1900年1月到目标年份,月份前一个月的总天数 */
	public int getTotalDaysFrom1900() {
		int days = 0;
		// 计算整年的总天数
		for (int i = 1900; i < year; i++) {
			days += isLeapYear(i) ? 366 : 365;
		}
		// 计算整月的总天数
		for (int i = 1; i < month; i++) {
			days += getDayOfMonth(i);

		}

		return days;
	}

	/** 根据提供的月份获取当月的总天数 */
	public int getDayOfMonth(int i) {
		switch (i) {
		case 4:
		case 6:
		case 9:
		case 11:
			return 30;
		case 2:
			return isLeapYear(year) ? 29 : 28;
		default:
			return 31;

		}
	}

	/** 打印日历 */
	public void print() {
		//获取打印当前月信息时要输出的空格数
		int spaces = getTotalDaysFrom1900()%7;
		//获取当前月份的总天数
		int days = getDayOfMonth(month);
		//打印输出
		System.out.println("\t\t               动态日历");
		System.out.println("\t\t  【"+year+"】年【"+month+"】月");
		System.out.println("==================================================");
		System.out.println("一\t二\t三\t四\t五\t六\t日");
		System.out.println("==================================================");
		//初始化计数器,同时是否到达7的倍数
		int count =0;
		for(int i = 0;i <spaces ;i++) {
			System.out.print("\t");
			count++;
		}
		//输出日期
		for(int i = 1;i <= days;i++) {
			System.out.print(i+"\t");
			count ++;
			if(count % 7 == 0) {
				System.out.println();
			}
		}
	}

}

TestCalender类

public class TestCalender {
	public static void main(String[] args) {
		MyCalender mc = new MyCalender(2019,6);
		int days = mc.getTotalDaysFrom1900();
		mc.print();
	}

}

以2019年6月测试

以下是运行结果

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值