实现简单的打印万年历
一个刚开始学习java的小白的第一次博客。不知道写点啥,就把最近写练的小练习,拿出来。希望大佬们手下留情,给点点评,我一定努力改正!!!不过可能也没人看吧,但是我要从今天开始坚持写博客了,虽然质量差很多,但我会努力学习,进步的,加油为了没有头发而奋斗!!!为了制造bug而努力!!!还有第一次用这个Markdown编辑器还不太熟悉,可能格式有些不对,希望不要介意。
要求:
输入年份year和月份month打印出整个月的日期
简单分析
1.计算机的日历是从1900年1月1号开始计算的
2.要打印本月的日期首先需要知道本月有多少天、本月的1号是从星期几开始的
3.然后这就要先算出本月的1号距离1900年1月1号有多少天,这就又牵扯到要判断出平年和闰年了
接下来就要开始敲了
日期类public class DatePrint {}
1.需要键盘输入,首先要导包
import java.util.Scanner;
2.属性
//属性
int year;
int month;
3.构造方法
/*构造方法*/
public DatePrint() {
}
public DatePrint(int year, int month) {
this.year = year;
this.month = month;
}
4.键盘输入的方法
如果把keyboard关闭的话会出错,但是不关的话就会警告,现在还不会解决,等学了输入输出流我应该就会解决了吧。
/*键盘输入方法*/
public int input() {
//创建对象
Scanner keyboard=new Scanner(System.in);
int input=keyboard.nextInt();
//keyboard.close();
return input;
}
5.判断平年py还是闰年
如果是闰年发会true,平年返回false
/*判断平年py还是闰年ry*/
public boolean rpYear(int year) {
boolean yearBoolean = false;
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
yearBoolean = true;
}
return yearBoolean;
}
6.判断每个月有多少天
case 0: 是为了如果输入1月后面需要-1,计算12月份
/*判断每个月有多少天*/
public int howMonthDay(int year, int month) {
int monthDay = 0;
switch (month) {
case 0:
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
monthDay = 31;
break;
case 4:
case 6:
case 9:
case 11:
monthDay = 30;
break;
default:
boolean rpy = rpYear(year);
if (rpy) {
monthDay = 29;
} else {
monthDay = 28;
}
}
return monthDay;
}
7.确定整年的天数
计算输入的year-1年到1900年1月1日经历的整年的天数差的总和
/*确定整年的天数*/
public int yearDay(int year) {
int yearTotal=0;
for(int i=1900;i<=year-1;i++) {
//调用判断闰年、平年的方法
boolean rpy=rpYear(year);
if(rpy) {
yearTotal+=366;
}else {
yearTotal+=365;
}
}
return yearTotal;
}
8.确定整月的天数
计算输入的month-1月到本年1月经历的整月的天数差的总和
这里就有可能用到上面的case 0:
/*确定整月的天数*/
public int monthDay(int year,int month) {
int monthTotal=0;
for(int i=1;i<=month-1;i++) {
monthTotal+=howMonthDay(year,i);
}
return monthTotal;
}
9.确定那一天是星期几
传入那一天输出星期几
我是从星期一开始打印的所以week=0是周一
/*确定那一天是星期几*/
public int howWerek(int day) {
int week;
switch ((day) % 7 + 1) {
case 1:
week = 0;
break;
case 2:
week = 1;
break;
case 3:
week = 2;
break;
case 4:
week = 3;
break;
case 5:
week = 4;
break;
case 6:
week = 5;
break;
default:
week = 6;
}
return week;
}
10.打印表头
/*打印表头*/
public void pHead(int year,int month) {
System.out.println(year + "年" + month + "月");
System.out.println("一\t二\t三\t四\t五\t六\t日\t");
}
11.补充前一个月
如果1号不是星期一,需要补充前一个月的最后几天
/*补充前一个月*/
public void pBefore(int year, int month,int week) {
// 上个月有多少天
int before = howMonthDay(year, month - 1);
for (int beforeDay = before - week + 1; beforeDay <= before; beforeDay++) {
System.out.print(beforeDay + "\t");
}
}
12.打印本月日期
/*打印本月日期*/
public void print(int dayMonth,int day) {
for(int i=1;i<=dayMonth;i++) {
System.out.print(i+"\t");
//每次到周日了需要换行
if((day+i-1)%7+1==7){
System.out.println();
}
}
}
13.补充下个月
/*补充下个月*/
public void pNext(int dayMonth,int day) {
// 判断这个月的最后一天时星期几
int lastWeek = howWerek(day+dayMonth+1-1);
for (int nextDay = 1; nextDay <= (6 - lastWeek+1); nextDay++) {
System.out.print(nextDay + "\t");
}
}
日期测试类public class DateTest {}
public static void main(String[] args) {
//创建Date对象
DatePrint date=new DatePrint();
//输入年份和月份
System.out.println("请输入年份:");
int year=date.input();
System.out.println("请输入月份:");
int month=date.input();
//确定某年某月某日到1900.1.1经过几个整年的天数
int yearTotal=date.yearDay(year);
//确认某年某月(给定日期的前一个月)到该年1月1号经过多少天(z),整月的天数
int monthTotal=date.monthDay(year,month);
//确定该月有多少天
int dayMonth=date.howMonthDay(year,month);
//天数差
int day=yearTotal+monthTotal+1-1;
//确定该月的1号是星期几
int week=date.howWerek(day);
//打印日期头
date.pHead(year,month);
//补上个月
date.pBefore(year,month,week);
//打印本月
date.print(dayMonth,day);
//补下个月
date.pNext(dayMonth,day);
}
运行效果图
有点小激动,加油!继续努力!
只要一直在不断努力,总有一天会追上你,赶超你。送给自己,也送给正在努力奋斗的大家。