输入某年得到年历,输入某年某月即得到月历
综合考虑,年历比较简单,可以调动12次月历函数即可,
月历的主要算法是,基于1900年1月1日是周日,算出现在据当时是多少天,由这个天数算出星期几(除以7),找到第一天在星期里的定位后,顺序输出本月的天数即可
其中我认为比较难的是两端天数的考虑,即我算出后的星期到底是昨天还是今天还是明天,我认为还是要考虑清楚算式,内心清楚,或者调试正确也可以
basic=theCountOfLeapYear(1899)+1899*365;
这个代表的就是1900年以前的天数,即不带1900年1月1日,也就是说,这个时候算出的星期都是今天的,可以举个例子,就拿
1900年1月1日,只差一天,1%7=1,星期一,当天,没毛病以此类推
temp=theCountOfLeapYear(year-1)+(year-1)*365;
year年以前的天数,值得注意的是,还可以得出,它和basic差几天就是当天差的天数,就像1900年1月1日,只差一天。
年历
public static void theMadeOfCalendarOfYear(int year) {//调用12次月份就是一年
for(int i=1;i<=12;i++) {
System.out.println(i+"月的月历为:");
System.out.println("------------------------------------");
theMadeOfCalendar(year,i);
}
}
月历就需要多考虑一些,
```java
```java
```java
public static void theMadeOfCalendar(int year,int month) {//以此为标准,1900年1月1日是周一
int temp,basic,week;
int[] weeks={1,2,3,4,5,6,0};//一周,因为,123对应周一周二周三好理解,则周日为0
temp=theCountOfLeapYear(year-1)+(year-1)*365;//多出来的天数
int[] monthNormol = {31,28,31,30,31,30,31,31,30,31,30,31};//12个月分别的天数,用数组存储直接调用!不是一个一个减去!!
if(isLeapYear(year))
monthNormol[1]=29; //一年只有一个二月,直接赋值即可,不需选择,判断2月的天数
for(int i=month-2;i>=0;i--) {
temp+=monthNormol[i];
}
basic=theCountOfLeapYear(1899)+1899*365;
week=(temp-basic+1)%7;
System.out.print(String.format("%5s","Mon"));
System.out.print(String.format("%5s","Tue"));
System.out.print(String.format("%5s","Wed"));
System.out.print(String.format("%5s","Thu"));
System.out.print(String.format("%5s","Fri"));
System.out.print(String.format("%5s","Sat"));
System.out.print(String.format("%5s","Sun"));
System.out.println();
// System.out.print(week);
for(int j=0;j<=6;j++) {
if(weeks[j]==week) {//找准开始的那一天
for(int m=1;m<=monthNormol[month-1];m++) {
System.out.print(String.format("%5s",m));
j++;
if(j==7) {
System.out.println();//顺序输出,遇到周日,输出完成后换行,所以是j=7而j=6
j=0;
}
}
j=7; //为了跳出循环
}else System.out.print(String.format("%5s","**"));
}
System.out.println();
}
请多多指正,感激不尽