• JAVA 打印指定月份日历


      1 package learnExercise;
      2 
      3 import java.util.Scanner;
      4 
      5 public class PrintCalender {
      6 
      7     /**
      8      * @param args
      9      */
     10     public static void main(String[] args) {
     11         // TODO Auto-generated method stub
     12         Scanner input=new Scanner(System.in);
     13         
     14         System.out.print("Enter full year (e.g.,2001): ");
     15         int year=input.nextInt();
     16         
     17         System.out.print("Enter month as number between 1 and 12: ");
     18         int month=input.nextInt();
     19         
     20         printMonth(year,month);
     21 
     22     }
     23 
     24     private static void printMonth(int year, int month) {
     25         // TODO Auto-generated method stub
     26         printMonthTitle(year, month);
     27         printMonthBody(year, month);
     28     }
     29     
     30     public static void printMonthTitle(int year, int month){
     31         System.out.println("        "+getMonthName(month)+" "+year);
     32         System.out.println("-------------------------");
     33         System.out.println(" Sun Mont Tue Wed Thu Fri Sat");
     34         
     35     }
     36     
     37     //打印月份主体
     38     public static void printMonthBody(int year,int month){
     39         int startDay=getStartDay(year, month);
     40         int numberOfDaysInMonth=getNumberOfDaysInMonth(year, month);
     41         for(int i=0;i<startDay;i++)
     42             System.out.print("    ");
     43         for(int i=1;i<=numberOfDaysInMonth;i++){
     44             System.out.printf("%4d",i);
     45             if((i+startDay)%7==0)
     46                 System.out.println();
     47         }
     48         System.out.println();
     49     }
     50     
     51     public static String getMonthName(int month){
     52         String  monthName="";
     53         switch(month){
     54         case 1: monthName="January";break;
     55         case 2: monthName="February";break;
     56         case 3: monthName="March";break;
     57         case 4: monthName="April";break;
     58         case 5: monthName="May";break;
     59         case 6: monthName="June";break;
     60         case 7: monthName="July";break;
     61         case 8: monthName="August";break;
     62         case 9: monthName="September";break;
     63         case 10: monthName="October";break;
     64         case 11: monthName="Nobember";break;
     65         case 12: monthName="December";break;
     66         }
     67         return monthName;
     68     }
     69     //获取指定月份的第一天是周几
     70     public static  int getStartDay(int year, int month){
     71         final int START_DAY_FOR_JAN_1_1800=8;
     72         int totalNumberOfDays=getTotalNumberOfDays(year,month);
     73         
     74         return (totalNumberOfDays+START_DAY_FOR_JAN_1_1800)%7;
     75     }
     76     //返回总共的天数,从1800年1月1日开始计算,直到指定月份1日的前一天
     77     public static int getTotalNumberOfDays(int year,int month){
     78         int total=0;
     79         for(int i=1800;i<year;i++)
     80             if(isLeapYear(i))
     81                 total=total+366;
     82             else 
     83                 total=total+365;
     84         
     85         for(int i=1;i<month;i++)
     86             total=total+getNumberOfDaysInMonth(year,i);
     87         
     88         return total;
     89     }
     90     
     91     //返回指定月份的天数
     92     public static int getNumberOfDaysInMonth(int year,int month){
     93         int result=0;
     94         switch (month){
     95         case 1:
     96         case 3:
     97         case 5:
     98         case 7:
     99         case 8:
    100         case 10:
    101         case 12:
    102             result=31;
    103             break;
    104         case 4:
    105         case 6:
    106         case 9:
    107         case 11:
    108             result=30;
    109             break;
    110         case 2:
    111             result=isLeapYear(year)?29:28;
    112             break;
    113         }
    114         return result;
    115     }
    116     
    117     //判断是否为闰年
    118     public static boolean isLeapYear(int year){
    119         return (year%400==0)||(year%4==0&&year%100!=0);
    120     }
    121 
    122 }

    方法抽象将程序模块化为整齐、层次分明的形式。将程序由简洁的方法构成的集合,比其他方式更容易编写、调试、维护和修改。

    编写大型程序时,可以使用自顶向下或自底向上的方法,不要一次性地编写整个程序。

    如果您觉得感兴趣的话,可以添加我的微信公众号:一步一步学Python
  • 相关阅读:
    Beyond Compare 4 过期操作
    python2 批量转 python3
    【JavaScript】为什么javascript是单线程
    Java之花样玩枚举
    OpenSSL
    OpenSSL和OpenSSH以及私有CA的实现
    Python-线程同步
    Zookeeper基础
    pycharm中使用git以及多分支结构
    BZOJ 4771 主席树+倍增+set
  • 原文地址:https://www.cnblogs.com/xingzhui/p/5700137.html
Copyright © 2020-2023  润新知