java基础—动态日历的实现

it2022-05-05  233

java基础—动态日历的实现

动态日历

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

分析

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

步骤分析

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

代码

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月测试

以下是运行结果

 


最新回复(0)