1 public class Test {
2
3 /**
4 * @param args
5 */
6 public static void main(String[] args) {
7 // TODO Auto-generated method stub
8 // 定义变量
9 int year, mouth;
10 int day = 0;
11 String cuowu;
12 Scanner sc = new Scanner(System.in);
13 int[] day1 = new int[] { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
14 int[] day2 = new int[] { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
15 int week, dayNum = 0;
16
17 // 输出
18 System.out.println("*******************欢迎使用万年历****************
");
19 System.out.print("请选择年份:");
20 // 判断是否输入我们需要的数据
21 while (true) {
22 if (sc.hasNextInt()) {
23 year = sc.nextInt();
24 if (year >= 1900) {
25 break;
26 } else {
27 System.out.print("输入数据不对请重新输入(1900年以后的年份)");
28 }
29 } else {
30 System.out.print("数据类型错误请重新输入");
31 cuowu = sc.next();
32 }
33 }
34
35 System.out.println();
36 System.out.print("请选择月份:");
37 while (true) {
38 if (sc.hasNextInt()) {
39 mouth = sc.nextInt();
40 if (mouth > 0 && mouth < 13) {
41 break;
42 } else {
43 System.out.print("输入数据不对请重新输入(1~12)");
44 }
45 } else {
46 System.out.print("数据类型错误请重新输入");
47 cuowu = sc.next();
48 }
49 }
50 System.out.println();
51 // 计算该年距离1900年1月1日有几天
52 for (int i = 1900; i < year; i++) {
53 if ((i / 400 == 0) || (i / 4 == 0 && i / 100 != 0)) {
54 day += 366;
55 } else {
56 day += 365;
57 }
58 }
59 // System.out.println(day);
60 // 计算选择月份1日距离1900年1月1日有几天
61 for (int i = 1; i < mouth; i++) {
62 if ((year % 400 == 0) || ((year % 100 != 0) && (year % 4 == 0))) {
63 day += day2[i - 1];
64 } else {
65 day += day1[i - 1];
66 }
67 }
68 // System.out.println(day);
69 // 计算该月第一天是星期几由于1900年1月1日是星期一,而我们打印从星期天开始,所以day+1
70 week = (day + 1) % 7;
71 // System.out.println(week);
72 // 赋值dayNum该月有几天
73 switch (mouth) {
74 case 1:
75 case 3:
76 case 5:
77 case 7:
78 case 8:
79 case 10:
80 case 12:
81 dayNum = 31;
82 break;
83 case 4:
84 case 6:
85 case 9:
86 case 11:
87 dayNum = 30;
88 break;
89 case 2:
90 if ((year % 400 == 0) || ((year % 100 != 0) && (year % 4 == 0))) {
91 dayNum = 29;
92 } else {
93 dayNum = 28;
94 }
95 break;
96 default:
97 break;
98 }
99 // 输出
100 System.out.println(" " + year + "年" + mouth + "月");
101 System.out.println("星期日 星期一 星期二 星期三 星期四 星期五 星期六");
102 for (int i = 0; i < week; i++) {
103 System.out.print("" + " ");
104 }
105 for (int i = 1; i <= dayNum; i++) {
106 System.out.print(i + " ");
107 if ((week + i) % 7 == 0) {
108 System.out.println();
109 }
110 }
111
112 }
113
114 }