利用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
本文个人原创,为学习总结,希望能帮助到大家,如有问题,希望大家不吝批评!!!