利用Java基础知识打印日历

利用Java基础知识打印日历

相对于用Calendar类打印日历,利用Java基础知识打印日历则更加基础,用到的知识点也更基础,当然,代码量就很大了

直接用Java基础知识打印日历,用到的知识点:java基础语法、数据类型、条件分支、循环语句、运算符、面向对象、类、对象、属性、方法、封装,需要创建多种方法:判断闰年、计算指定月份的天数、计算从1900年1月1日到指定年月前一月的总天数(1900年1月1日刚好是周一)、计算指定年月的1号前的空格数等等,但逻辑比较通俗易懂,希望能帮助到大家!

MyCalendar类

/**
 * java基础语法
 * 数据类型、条件分支、循环语句、运算符
 * 面向对象
 * 类、对象、属性、方法、封装
 * @author July.Jul
 *
 */
public class MyCalendar {

	private int year;
	private int month;
	
	/**构造器,初始化年份和月份*/
	public MyCalendar(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;
	}
	
	/**根据提供的月份获取当前月份的总天数*/
	private int getDayOfMonth(int m){
		if(m <= 0 || m > 12){
			System.out.println("输入月份错误,请重新输入!");
		}
		switch(m){
		case 4:
		case 6:
		case 9:
		case 11:
			return 30;
		case 2:
			return isLeapYear(year) ? 29 : 28;
			default:
				return 31;
		}
	}
	
	/**计算从1900年1月份到指定年月的前一个月的总天数*/
	public int getTotalDayFrom1900(){
		int days = 0;
		/**计算整年天数*/
		for (int i = 1900; i < year; i++){
			days += isLeapYear(i) ? 366 : 365;
		}
		/**计算整月的总天数*/
		for (int j = 1; j < month; j++){
			days += getDayOfMonth(j);
		}
		
		return days;
	}
	
	/**打印日历*/
	public void print(){
		/**获取打印当前月信息时要输出的空格数*/
		int spaces = getTotalDayFrom1900() % 7;
		/**获取当前月份总天数*/
		int days = getDayOfMonth(month);
		/**打印输出*/
		System.out.println("**************************************************");
		System.out.println("************July.Jul的万年历【" + year + "】年【" + month + "】月*************");
		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 j = 1; j <= days; j++){
			System.out.print(j + "\t");
			count ++;
			if(count % 7 == 0){
				System.out.println();
			}
		}
	}
}

TestCalendar类

public class TestCalendar {

	public static void main(String[] args) {

		MyCalendar mc = new MyCalendar(2019,7);
		mc.print();

	}

}

结果:

**************************************************
************July.Jul的万年历【2019】年【7】月*************
一	二	三	四	五	六	日
**************************************************
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	31	

本文个人原创,为学习总结,希望能帮助到大家,如有问题,希望大家不吝批评!!!

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值