?? calendar.java
字號(hào):
///////////////////////////////////////////////////////Exercise 4.5,可以通過設(shè)置年份來輸出這一年的日歷//////////////////////////////////////////////////////public class Calendar { public int numOfDays(int y,int m)//輸入年、月,返回這個(gè)月的天數(shù) { 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)//輸入年,返回這年的天數(shù) { 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)//取年、月、日作為參數(shù),返回該日期是這一年的第幾天; { 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)//取年、月、日作為參數(shù),返回當(dāng)前日期是星期幾. { int week=0,preWeek=1,preYear=2005,preMonth=10,preDay=10; //預(yù)設(shè)標(biāo)準(zhǔn)日期為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))))) //判斷輸入的時(shí)間和預(yù)設(shè)的時(shí)間的先后,輸入時(shí)間晚于預(yù)設(shè)時(shí)間,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))// 輸入的時(shí)間和預(yù)設(shè)的時(shí)間是同一天,flag=0; flag=0; else{ maxYear=preYear;maxMonth=preMonth;maxDay=preDay;//輸入時(shí)間早于預(yù)設(shè)時(shí)間,flag=-1; minYear=w_year;minMonth=w_month;minDay=w_day; flag=-1; } int maxt,mint,n,totalDay,i; maxt=DaysInYear(maxYear,maxMonth,maxDay);//晚一點(diǎn)的那天是那一年的第幾天 n=dayOfYear(minYear);//早一點(diǎn)的那天那一年有幾天 mint=DaysInYear(minYear,minMonth,minDay);//早一點(diǎn)的那天是那一年的第幾天 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; //當(dāng)兩天不在同一年中,兩天之間相差的天數(shù) } else totalDay=maxt-mint; //當(dāng)兩天在同一年中,兩天之間相差的天數(shù) if(flag==1) week=(totalDay+1)%7; //計(jì)算是星期幾 if(flag==0) week=1; if(flag==-1) week=7-(totalDay-1)%7; return week; } ///////////////////////////////////////////////////////////////////// //輸出日歷和日期的個(gè)位數(shù)與相應(yīng)的星期恰好相同的天數(shù) ///////////////////////////////////////////////////////////////////// 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);//累計(jì)日期的個(gè)位數(shù)與相應(yīng)的星期恰好相同的天數(shù) 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++) //設(shè)置日歷的輸出格式 { for(j=0;j<=6;j++) { if((j==6||cal[i][j]==f)&&cal[i][j]!=0) //星期日和這個(gè)月的最后一天 System.out.println(cal[i][j]); else if(cal[i][j]==0) //這個(gè)月的第一天之前 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日期的個(gè)位數(shù)與相應(yīng)的星期恰好相同的天數(shù)有"+s+"天"); } /////////////////////////////////////////////////////////////////////// public static void main(String args[]) { Calendar j=new Calendar(); j.display(2008); //設(shè)置年份,輸出這一年的日歷及這一年日期的個(gè)位數(shù)與相應(yīng)的星期恰好相同的天數(shù) }}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -