一.日历的打印(多个方法实现)
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);
}
}