JAVA 打印指定月份日历
2016-07-24 09:39
387 查看
package learnExercise; import java.util.Scanner; public class PrintCalender { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Scanner input=new Scanner(System.in); System.out.print("Enter full year (e.g.,2001): "); int year=input.nextInt(); System.out.print("Enter month as number between 1 and 12: "); int month=input.nextInt(); printMonth(year,month); } private static void printMonth(int year, int month) { // TODO Auto-generated method stub printMonthTitle(year, month); printMonthBody(year, month); } public static void printMonthTitle(int year, int month){ System.out.println(" "+getMonthName(month)+" "+year); System.out.println("-------------------------"); System.out.println(" Sun Mont Tue Wed Thu Fri Sat"); } //打印月份主体 public static void printMonthBody(int year,int month){ int startDay=getStartDay(year, month); int numberOfDaysInMonth=getNumberOfDaysInMonth(year, month); for(int i=0;i<startDay;i++) System.out.print(" "); for(int i=1;i<=numberOfDaysInMonth;i++){ System.out.printf("%4d",i); if((i+startDay)%7==0) System.out.println(); } System.out.println(); } public static String getMonthName(int month){ String monthName=""; switch(month){ case 1: monthName="January";break; case 2: monthName="February";break; case 3: monthName="March";break; case 4: monthName="April";break; case 5: monthName="May";break; case 6: monthName="June";break; case 7: monthName="July";break; case 8: monthName="August";break; case 9: monthName="September";break; case 10: monthName="October";break; case 11: monthName="Nobember";break; case 12: monthName="December";break; } return monthName; } //获取指定月份的第一天是周几 public static int getStartDay(int year, int month){ final int START_DAY_FOR_JAN_1_1800=8; int totalNumberOfDays=getTotalNumberOfDays(year,month); return (totalNumberOfDays+START_DAY_FOR_JAN_1_1800)%7; } //返回总共的天数,从1800年1月1日开始计算,直到指定月份1日的前一天 public static int getTotalNumberOfDays(int year,int month){ int total=0; for(int i=1800;i<year;i++) if(isLeapYear(i)) total=total+366; else total=total+365; for(int i=1;i<month;i++) total=total+getNumberOfDaysInMonth(year,i); return total; } //返回指定月份的天数 public static int getNumberOfDaysInMonth(int year,int month){ int result=0; switch (month){ case 1: case 3: case 5: case 7: case 8: case 10: case 12: result=31; break; case 4: case 6: case 9: case 11: result=30; break; case 2: result=isLeapYear(year)?29:28; break; } return result; } //判断是否为闰年 public static boolean isLeapYear(int year){ return (year%400==0)||(year%4==0&&year%100!=0); } }
方法抽象将程序模块化为整齐、层次分明的形式。将程序由简洁的方法构成的集合,比其他方式更容易编写、调试、维护和修改。
编写大型程序时,可以使用自顶向下或自底向上的方法,不要一次性地编写整个程序。
相关文章推荐
- github not authorized eclipse
- 4、字符串
- 理解RxJava:(二)Operator,Operator
- 如何在Java中使用注释
- java数组
- java.lang.IllegalArgumentException: invalid comparison: java.util.Date and java.lang.String
- maven启动 cannot be cast to javax.servlet.Filter/cannot be cast to javax.servlet.Servlet 报错
- java中的final
- java中的泛型
- java - 利用cookie实现记住用户名方便之后登陆
- "Start Ruble bundle manager". java.lang.NullPointerException
- Java千百问_09基础类库(002)_util包有什么功能
- Java Web学习(19):阶段项目之使用JSP+JavaBean完成用户登录
- Java千百问_09基础类库(001)_lang包有什么功能
- java中String类的hashCode方法实现
- Java-基础-代码块-继承--关键字
- JavaWeb ChartDirector 图表插件-web图表开发-ChartDirector资料
- java-基础-计算数组的转置(横向输出)
- 15个Java的报表工具简介
- java-抽象类和接口的作用