你没有见过的JAVA动态日历(船新版本)

    技术2026-04-08  9

    Author:天添豆浆 计算机科学与技术专业,迷摇滚的理科男 新手村码农,第一篇博客,记录成长

    你没有见过的JAVA动态日历(船新版本)

    前言:话不多说看看代码: 输出结果(截图):反思:写在最后:PS:

    老标题党了…基础语法不值一提,重在记录学习过程。

    前言:

    显示方法和视觉排版跟以前的动态日历一样,都是在控制台打印输出。以前没有学习Calendar类及其常用方法,是自定义方法,从底层算法逻辑判断平闰年、月份天数。本题核心内容:“本月第一天是星期几?”的实现逻辑也大不相同。但是最终排版打印显示界面的代码逻辑相同。
    话不多说看看代码:
    import java.util.Calendar; /** * 动态日历(船新版本) * 要求: * 使用Calendar类完成一个动态日历(就在控制台打印输出,不涉及窗口JFrame), * 要求提供年份、月份,显示当月的日历布局。 * 实现动态日历有两个问题: * 1、当月有 多少天? * 2、本月第一天是星期几? * 提示: * Calendar类 * * @author 天添豆浆 * */ public class MyCalendar { private int year; private int month; public MyCalendar(int year, int month) { this.year = year; this.month = month; } public void showCalendar() { //获取日历的实例对象,getInstance()将返回一个Calendar的对象 Calendar c = Calendar.getInstance(); c.set(Calendar.YEAR, year); c.set(Calendar.MONTH, month -1); //将日期设置为当月的第1天 c.set(Calendar.DAY_OF_MONTH, 1); //获取当天(1号)是此月周几!!!!!! int weekDay = c.get(Calendar.DAY_OF_WEEK) - 1; // System.out.println(weekDay); //经测试,2020年3月日历有bug,特殊情况特殊处理 if(weekDay == 0) { weekDay = 7; } //获取当月具备的最大值(当月总天数)!!!!!! int days = c.getActualMaximum(Calendar.DAY_OF_MONTH); // System.out.println(days); //制作控制台打印的界面布局 System.out.println("==================【船新版本动态日历】=================="); System.out.println("--------------------【"+ year + "年" + month + "月" + "】-------------------"); System.out.println("一\t二\t三\t四\t五\t六\t日"); System.out.println("--------------------------------------------------"); //声明计数器,统计是否到达7,若到7则需转行(布局需要) int count = 0; //打印出数\t //*只有遍历数组才从0开始循环,因为数组索引是从0开始 for (int i = 1; i < weekDay; i++) { System.out.print("\t"); //计数器计数 count ++; } //打印天数(天数<=days(本月最大天数)) for (int j = 1; j <= days; j++) { System.out.print(j + "\t"); //计数器计数 count++; /*添加判断: * 若计数器到7(填满一周),需换行,并且计数器归零,以便下周的日期顺序输出*/ if(count == 7) { System.out.println(); System.out.println(); count = 0; } } } public static void main(String[] args) { /* 创建类的对象,传入想查询的年份、月份, * 调用上述showCalendar()方法*/ new MyCalendar(2020,7).showCalendar(); } } /** * 补充: * Calendar类是一个抽象类,在实际使用时实现特定的子类的对象。 * 由于Calendar类是抽象类,且Calendar类的构造方法是protected的, * 所以无法使用Calendar类的构造方法来创建对象,API中提供了getInstance方法用来创建对象。 * 所以定义一个Calendar对象就应该为:Calendar c = Calendar.getInstance(); */

    输出结果(截图):

    反思:

    学习了一些JDK内置类即其常用方法,相比之前,优化了实现过程。学习的内置方法虽然代码更简单,但其底层的算法逻辑还是得明白。(记得时不时看看以前的代码看看逻辑,也别忘了查看源码、查API)但这次动态日历还是只用了一个自定义方法,逻辑与可视化布局挤在一起,思维结构比混乱,可以优化的地方还有很多。下次再尝试加入Scanner和JFrame内容,在窗口显示运行。同一个题目,在学习到新知识的过程中,不断去运用新知识,从而简化实现过程,优化实现效果。

    写在最后:

    希望写博客是一个好的开始,记录自己的成长、分享自己的心得,也希望以后回首现在的这些技术经历能有心得收获新的感悟。

    PS:

    某易云上那个码农必备的后摇歌单快把我听睡着了, 还是激流金属鞭鞑金属带劲_(:τ」∠)_

    Processed: 0.011, SQL: 9