在一个页面上输出1901至2007年之间任意一年的简易日历表
public class Calendar { public static void main(String[] args){ String Weeks="Su Mo Tu We Th Fr Sa";//星期列表 int i,j;//循环控制列表 int Ospa3=1;//给出1900年的1月1日为星期一 //改变year的值(大于1900),就可列出当年的日历表 int year=2007; boolean leap=year%4==0&&year%100!=0||year%400==0; for(i=1900;i<year;i++)//计算1901年及其后的每年一月一号对应的星期 if(i%4==0&&i%100!=0||i%400==0)Ospa3+=2; else Ospa3++; Ospa3%=7;//表明7天为一个星期 System.out .println(" Calendar of"+year); //在屏幕输出星期列表 for(i=1;i<3;i++)System.out .print(Weeks);//每行中显示3个星期 System.out .println(""); int spa1=0,spa2=0,spa3=0,cou1=0,cou2=0,cou3=0; //存放连续3个月对应的日期和当月的总天数 int day1=1,day2=1,day3=1; for(j=1;j<28;j++){ if((j-1)%7==0){ day1=1;day2=1;day3=1;//设置连续3个月的日期输出均从1号开始 switch(j/7){//分别设置一年中每个月1日的星期,和当月的总天数 case 0: spa1=(Ospa3+cou3)%7;cou1=31;//1月 spa2=(spa1+cou1)%7;cou2=leap?29:28;//2月 spa3=(spa3+cou2)%7;cou3=31;//3月 Ospa3=spa3; break; case 1: spa1=(Ospa3+cou3)%7;cou1=30;//4月 spa2=(spa1+cou1)%7;cou2=31;//5月 spa3=(spa3+cou2)%7;cou3=30;//6月 Ospa3=spa3; break; case 2: spa1=(Ospa3+cou3)%7;cou1=31;//7月 spa2=(spa1+cou1)%7;cou2=31;//8月 spa3=(spa3+cou2)%7;cou3=30;//9月 Ospa3=spa3; break; case 3: spa1=(Ospa3+cou3)%7;cou1=31;//十月 spa2=(spa1+cou1)%7;cou2=30;//十一月 spa3=(spa3+cou2)%7;cou3=31;//十二月 Ospa3=spa3; break; } } for(i=1;i<=21;i++){//在屏幕上输出日历,一行输出21列 if((i-1)/7==0)//每一行的前7列输出第一个月 System.out.print(spa1--<=0&&day1<cou1?day1<10?"0"+day1++:""+day1++:" "); else if((i-1)/7==1)//每一行中间7列输出第二个月 System.out.print(spa2--<=0&&day2<cou1?day2<10?"0"+day2++:""+day2++:" "); else//每一行的后7列输出第3个月 System.out.print(spa3--<=0&&day3<cou1?day3<10?"0"+day3++:""+day3++:" "); if(i%7==0) System.out.print(" ");//每行中,月份之间的空格 } System.out.println("");//换行 } } }