欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-05-07 18:18:50
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar...

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

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

前言:

  • 显示方法和视觉排版跟以前的动态日历一样,都是在控制台打印输出。
  • 以前没有学习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();
 */


输出结果(截图):

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

反思:

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

写在最后:

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

PS:

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

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

本文地址:https://blog.csdn.net/qq_45104588/article/details/107132456