应用方法,用Java打印日历。
1 import java.util.Scanner;
2
3 /**
4 *打印1900年之后的日历
5 *@author:Archer-LCY
6 *@date:2018年1月19日上午10:20:39
7 */
8 public class Calendal {
9 //注意全局变量声明的位置
10 /**用户输入的年份*/
11 public static int year = Integer.MAX_VALUE;
12 /**用户输入的月份*/
13 public static int month = Integer.MAX_VALUE;
14 /**每月的天数*/
15 public static int [] dayofmonth= {31,28,31,30,31,30,31,31,30,31,30,31};
16 public static void main(String[] args) {
17
18 PrintCalendal();
19 }
20
21 public static void PrintCalendal() {
22 // TODO Auto-generated method stub
23 //1、让用户输入年月份
24 InputYearandMonth();
25 //2、计算1900-1-1到用户输入年份的天数
26 //2-1计算各年的总天数
27 //2-2计算各月的天数之和
28 int sum=GetsumdayofYear();
29 sum+=GetsumdayofMonth();
30 //计算每月的一号是星期几
31 int dayofweek=sum%7+1;
32
33 //3、打印年月份(英文),打印月份的标题(星期一到星期日)
34 PrintMonthTitle();
35 //4、根据某年某月一号星期几,打印月历功能
36 PrintCalendalContent(dayofweek);
37 }
38 /**
39 * 根据当月一号打印月历内容
40 * @param dayofweek 当月一号星期几
41 */
42 private static void PrintCalendalContent(int dayofweek) {
43 // TODO Auto-generated method stub
44 for(int i=0;i<dayofweek-1;i++) {
45 System.out.print("\t");
46 }
47 for(int i=0;i<dayofmonth[month-1];i++) {
48 System.out.print((i+1));
49 if((dayofweek+i)%7==0){
50 System.out.print("\n");
51
52 }else
53 System.out.print("\t");
54 }
55 }
56
57 /**
58 * 3、打印年月份(英文),打印月份的标题(星期一到星期日)
59 */
60 private static void PrintMonthTitle() {
61 // TODO Auto-generated method stub
62 String[] monthofname= {"January","February","March","April","May","June","July","August","September","October","November","December"};
63 System.out.println(year+"\t"+monthofname[month-1]);
64 String[] weekdays= {"Mon","Tue","Wed","Thu","Fir","Sta","Sun"};
65 for(int i=0;i< weekdays.length;i++) {
66 System.out.print(weekdays[i]+"\t");
67 }
68 System.out.println();
69 }
70
71 /**
72 * 计算1900-year整年的总天数
73 * @return sum总天数
74 */
75 private static int GetsumdayofYear() {
76 // TODO Auto-generated method stub
77 //判断是否输入年份
78 if(year==Integer.MAX_VALUE) {//用户没有输入,重新调用
79 System.out.println("输入错误请从新输入!");
80 InputYearandMonth();
81 }
82 int sum=0;
83 for(int i=1900;i<year;i++) {
84 sum+=365;
85 //判断是不是闰年
86 if(isLeapYear(i)) {
87 sum++;//闰年多加一年
88 }
89 }
90 return sum;
91 }
92
93 /**
94 * 判断是不是闰年
95 * @param year 要判断的年份
96 * @return 是闰年返回true
97 */
98 private static boolean isLeapYear(int year ) {//此处一定要加参数year,表示的是传入的参数值而不是全局变量中的year值
99 return year%400==0||year%4==0&&year%100!=0;//先算与再算或
100 }
101
102 /**
103 * 计算月份天数
104 * @return sum返回year这一年月份的总天数
105 */
106 private static int GetsumdayofMonth() {
107 // TODO Auto-generated method stub
108
109 int sum=0;
110 for(int i=0;i<month-1;i++) {
111 sum+=dayofmonth[i];
112 if(isLeapYear(year)&&month>=3) {
113 sum++;
114 }
115 }
116 return sum;
117 }
118
119 public Calendal() {
120 // TODO Auto-generated constructor stub
121 }
122
123 /**
124 * 用户输入年份和月份
125 */
126 private static void InputYearandMonth() {
127 // TODO Auto-generated method stub
128 Scanner input =new Scanner(System.in);
129 System.out.print("请输入年份:");
130 // int year=input.nextInt();//局部变量
131 year=input.nextInt();
132 System.out.print("请输入月份:");
133 month = input.nextInt();
134 //节省资源
135 input.close();
136 input=null;
137 }
138 }
运行结果: