日历小项目升级版本

一.日历的打印(多个方法实现)

1.判断年份是否是闰年的方法

2.计算指定月份天数的方法

3.计算当前年当前月份前面所有月份的天数

4.计算从1900年到当前年的前一年的所有年份的天数

5.负责打印日历的方法

package com.bai.demo;

public class Hello {
	public static void main(String[] args) {
		printCalender(2022);
	}
	
	/**
	 * 判断是否是闰年的方法
	 * @param year 需要判断的年份
	 * @return     如果是闰年返回true 否则返回false
	 */
	public static boolean isLearYear(int year) {
		return (year%4==0 && year%100!=0 )||(year%400==0);
		
	}
	
	/**
	 * 计算指定月份的天数
	 * @param month 要计算的月份
	 * @param year  要计算的月份所在的年份
	 * @return      最后要计算的指定月份的天数
	 */
	public static int countMonthDays(int month,int year) {
		if (month==4|month==6|month==9|month==11) {
			return 30;		
		}else if (month==2) {
			return isLearYear(year)?29:28;			
		}else {
			return 31;
		}
	}
	
	/**
	 * 计算当前年当前月前面所有天份的天数
	 * @param nowMonth  当前月份
	 * @param nowYear   当前年
	 * @return          计算后的当前年当前月的天数
	 */
	public static int countAllMonthDays(int nowMonth,int nowYear) {
		int allMonthDays=0;
		for (int i = 1; i < nowMonth; i++) {
			allMonthDays+=countMonthDays(i, nowYear);
		}
		return allMonthDays;
	}
	
	/**
	 * 计算1900到前一年所有的天数
	 * @param nowYear   当前年
	 * @return          返回计算的1900到前一年所有的天数
	 */
	public static int countAllYearDays(int nowYear) {
		int allYearDays=0;
		for (int i = 1900; i < nowYear; i++) {
			allYearDays += isLearYear(i)?366:365;	
		}
		return allYearDays;	
	}

	/**
	 * 打印一年的日历
	 * @param nowYear      要打印的年份
	 */
	public static void printCalender(int nowYear) {
		int allYearDays=countAllYearDays(nowYear);
		for (int i = 1; i <= 12; i++) {
			//打印月份提示符
			System.out.println("\t\t\t"+i+"月");
			//打印星期
			System.out.println("星期一\t星期二\t星期三\t星期四\t星期五\t星期六\t星期日");
			//计算出每个月的一号前面的空格
			int  r = (countAllMonthDays(i, nowYear)+allYearDays)%7;
			//打印空格
			for (int j = 0; j < r; j++) {
				System.out.print("\t");
			}
			//打印号数
			for (int k = 1; k <= countMonthDays(i, nowYear); k++) {
				if ((k+r)%7==0) {
					System.out.println(k+"\t");	
				}else {
					System.out.print(k+"\t");
				}
			}
			System.out.println();
		}
	}
}

最开始的时候我们是在主方法中实现日历的打印,到后面我们将这个项目按照功能的不同分离出不同的方法,使用方法之间可以互相调用的特性实现了整个项目额组合(这里体现了面向对象的思想)。但是这样还不够,我们继续观察问题。

日历项目继续升级

面向对象开发的过程,是一种组件化的思想,将单独的功能交给单独的组件(暂时理解为类)去实现,这个独立出来的组件就可以被重复使用。

使用专门的类打印日历

package com.bai.demo;

public class Hello {
	public static void main(String[] args) {
		Calender.printCalender(2020);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值