用java实现打印任一年的日历

来源:互联网 发布:淘宝店招和导航做全屏 编辑:程序博客网 时间:2024/04/28 02:42

 

Code:
  1. import java.io.BufferedReader;   
  2. import java.io.IOException;   
  3. import java.io.InputStreamReader;   
  4.   
  5. public class TextControl {   
  6.     static int year,monthDay,weekDay;  //定义静态变量,以便其它类调用   
  7.      public static void main(String[] args) throws IOException   
  8.      {   
  9.       System.out.print("请输入一个年份:");   
  10.       InputStreamReader ir;  //以下6行代码接受从控制台输入   
  11.       BufferedReader in;   
  12.       ir=new InputStreamReader(System.in);   
  13.       in=new BufferedReader(ir);   
  14.       String s=in.readLine();   
  15.       year=Integer.parseInt(s);   
  16.       weekDay=firstDay(year);  //计算该年第一天是星期几   
  17.       System.out.println("/n          "+year+"年          ");   
  18.       printMonth();   
  19.      }   
  20.   
  21.      public static boolean isLeapYear(int y)  //叛别是否是闰年   
  22.      {   
  23.       return ((y%4==0 && y%100!=0) || (y%400==0));   
  24.      }   
  25.         
  26.      public static int firstDay(int y)  //计算该年第一天是星期几   
  27.      {   
  28.       long n=y*365;   
  29.       for(int i=1;i<y;i++)   
  30.        if(isLeapYear(i))   
  31.         n+=1;    
  32.       return (int)n%7;   
  33.      }   
  34.   
  35.      public static void printWeek()  //打印标头   
  36.      {   
  37.       System.out.println("===========================");   
  38.       System.out.println("日  一  二  三  四  五  六");   
  39.      }   
  40.   
  41.      public static int getMonthDay(int m)  //获取每个月的天数   
  42.      {   
  43.       switch(m)   
  44.       {   
  45.        case 1:   
  46.        case 3:   
  47.        case 5:   
  48.        case 7:   
  49.        case 8:   
  50.        case 10:   
  51.        case 12return 31;   
  52.        case 4:   
  53.        case 6:   
  54.        case 9:   
  55.        case 11return 30;   
  56.        case 2:   
  57.         if(isLeapYear(year)) return 29;   
  58.         else return 28;   
  59.        defaultreturn 0;   
  60.       }   
  61.      }   
  62.   
  63.      public static void printMonth()  //分别按不同条件逐月打印   
  64.      {   
  65.       for(int m=1;m<=12;m++)    //循环   
  66.       {   
  67.        System.out.println(m+"月");    
  68.        printWeek();   
  69.        for(int j=1;j<=weekDay;j++)  //按每个月第一天是星期几打印相应的空格   
  70.          System.out.print("    ");   
  71.        int monthDay=getMonthDay(m);  //获取每个月的天数   
  72.        for(int d=1;d<=monthDay;d++)     
  73.        {   
  74.         if(d<10)                                  //以下4行对输出格式化   
  75.          System.out.print(d+"   ");   
  76.         else  
  77.          System.out.print(d+"  ");   
  78.         weekDay=(weekDay+1)%7;   //每打印一天后,反应第二天是星期几   
  79.         if(weekDay==0)  //如果第二天是星期天,便换行。   
  80.          System.out.println();   
  81.        }   
  82.        System.out.println('/n');   
  83.       }   
  84.      }  

这个程序是在某本书上看到的,但是中间一个方法不太清除,下面这段:

Code:
  1. public static int firstDay(int y)  //计算该年第一天是星期几   
  2.  {   
  3.   long n=y*365;   
  4.   for(int i=1;i<y;i++)   
  5.    if(isLeapYear(i))   
  6.     n+=1;    
  7.   return (int)n%7;   
  8.  }  

请知道的同学,老师给予指点,不胜感激