📄 calendar.java
字号:
///////////////////////////////////////////////////////Exercise 4.5,可以通过设置年份来输出这一年的日历//////////////////////////////////////////////////////public class Calendar { public int numOfDays(int y,int m)//输入年、月,返回这个月的天数 { int num=1; if(m==1|m==3|m==5|m==7|m==8|m==10|m==12) num=31; if(m==4|m==6|m==9|m==11) num=30; if(m==2) { if((y%4==0&&y%100!=0)||(y%100==0&&y%400==0)) //判断是否为闰年 num=29; else num=28; } return num; } ///////////////////////////////////////////// public int dayOfYear(int yy)//输入年,返回这年的天数 { int num; if((yy%4==0&&yy%100!=0)||(yy%100==0&&yy%400==0)) num=366; else num=365; return num; } /////////////////////////////////////////////////////////// public int DaysInYear(int m_year,int m_month,int m_day)//取年、月、日作为参数,返回该日期是这一年的第几天; { int sum=0,total,i; for(i=m_month-1;i>0;i--) { int n; n=numOfDays(m_year,i); sum+=n; } total=sum+m_day; return(total); } //////////////////////////////////////////////////////////// public int getDayOfWeek(int w_year,int w_month,int w_day)//取年、月、日作为参数,返回当前日期是星期几. { int week=0,preWeek=1,preYear=2005,preMonth=10,preDay=10; //预设标准日期为2005.10.10星期一 int maxYear=0,maxMonth=0,maxDay=0,minYear=0,minMonth=0,minDay=0,flag=0; if((w_year>preYear)||((w_year==preYear)&&((w_month>preMonth)||((w_month==preMonth)&&(w_day>preDay))))) //判断输入的时间和预设的时间的先后,输入时间晚于预设时间,flag=1; { maxYear=w_year;maxMonth=w_month;maxDay=w_day;//把早的那天年、月、日的值赋给maxYear,maxMonth,maxDay minYear=preYear;minMonth=preMonth;minDay=preDay;//晚的那天赋给minYear,minMonth,minDay flag=1; } else if((w_year==preYear)&&(w_month==preMonth)&&(w_day==preDay))// 输入的时间和预设的时间是同一天,flag=0; flag=0; else{ maxYear=preYear;maxMonth=preMonth;maxDay=preDay;//输入时间早于预设时间,flag=-1; minYear=w_year;minMonth=w_month;minDay=w_day; flag=-1; } int maxt,mint,n,totalDay,i; maxt=DaysInYear(maxYear,maxMonth,maxDay);//晚一点的那天是那一年的第几天 n=dayOfYear(minYear);//早一点的那天那一年有几天 mint=DaysInYear(minYear,minMonth,minDay);//早一点的那天是那一年的第几天 int sum=0; if(w_year!=preYear) { if((maxYear-minYear)>=2) { for(i=minYear+1;i<maxYear;i++) sum+=dayOfYear(i); } if((maxYear-minYear)==1) sum=0; totalDay=n-mint+sum+maxt; //当两天不在同一年中,两天之间相差的天数 } else totalDay=maxt-mint; //当两天在同一年中,两天之间相差的天数 if(flag==1) week=(totalDay+1)%7; //计算是星期几 if(flag==0) week=1; if(flag==-1) week=7-(totalDay-1)%7; return week; } ///////////////////////////////////////////////////////////////////// //输出日历和日期的个位数与相应的星期恰好相同的天数 ///////////////////////////////////////////////////////////////////// public void display(int year) { int[][]cal=new int[6][7]; String[]weekDay={"星期一","星期二","星期三","星期四","星期五","星期六","星期日"}; int m,sum=0,s=0; for(m=1;m<=12;m++) { System.out.println("\n"+year+"."+m); //输出年、月 int k; for(k=0;k<6;k++) //输出星期 System.out.print(weekDay[k]+"\t"); System.out.println(weekDay[k]); Calendar c=new Calendar(); int d=c.getDayOfWeek(year,m,1); int f=c.numOfDays(year,m); int i,j,n=0; for(i=0;i<=5;i++) //输出日历 { for(j=0;j<=6&&n<f;j++) { if(i==0) { if(d!=0&&d!=7) { for(;j<d-1;j++) cal[i][j]=0; } else { if(year>2005) { for(;j<d+6;j++) cal[i][j]=0; } else{ for(;j<d-1;j++) cal[i][j]=0; } } } n=n+1; cal[i][j]=n; int g=c.getDayOfWeek(year,m,n);//累计日期的个位数与相应的星期恰好相同的天数 int l=0; if(g==0||g==7) l=g%7+7; else l=g; if(cal[i][j]%10==l) sum++; } } for(i=0;i<=5;i++) //设置日历的输出格式 { for(j=0;j<=6;j++) { if((j==6||cal[i][j]==f)&&cal[i][j]!=0) //星期日和这个月的最后一天 System.out.println(cal[i][j]); else if(cal[i][j]==0) //这个月的第一天之前 System.out.print("\t"); else System.out.print(cal[i][j]+"\t"); } } for(i=0;i<=5;i++) { for(j=0;j<=6;j++) { cal[i][j]=0; } } } s+=sum; System.out.println("\n日期的个位数与相应的星期恰好相同的天数有"+s+"天"); } /////////////////////////////////////////////////////////////////////// public static void main(String args[]) { Calendar j=new Calendar(); j.display(2008); //设置年份,输出这一年的日历及这一年日期的个位数与相应的星期恰好相同的天数 }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -