1 import java.util.Scanner; 2 3 public class MyCalendar { 4 /* 5 * 从控制台输入 × × × ×年× ×月,从控制台输出该月日历 (1900年1月1日是星期一) 6 * 7 */ 8 9 public static void main(String[] args) { 10 Scanner sc = new Scanner(System.in); 11 12 // 获得输入的那一年的天数 13 // public void isYear() { 14 System.out.println("请输入年"); 15 int getYear = sc.nextInt();// 获得年 16 int isR = 0;// 是闰年计数 17 // 判断几个平年几个闰年 18 for (int i = 1900; i < getYear; i++) { 19 // 判断是否是闰年:能被4整除但不能被100整除;或者能被400整除 20 if (i % 400 == 0 || (i % 4 == 0 && i % 100 != 0)) { 21 isR++; 22 } 23 // 到该年的一月一号有多少天 24 } 25 int allYearDay = isR * 366 + (getYear - 1900 - isR) * 365; 26 // 判断输入的这一年是平年还是闰年 27 int isRight = (getYear % 400 == 0 || getYear % 4 == 0 && getYear % 100 != 0) ? 366 : 365; 28 29 // 获得输入的那个月的天数 30 // public void isMonth() { 31 System.out.println("请输入月"); 32 int getMonth = sc.nextInt(); 33 // 闰年2月:29天 34 // 平年2月:28天 35 // 口诀 36 // 一三五七八十腊 37 // 三十一天永不差 38 // 四六九冬三十整 39 // 平年二月二十八 40 // 闰年二月把一加 41 // 这里面的腊月指十二月 42 // 冬指的是十一月 43 // 闰年是年数除四能除尽的 44 // 平年是除了闰年的年 45 // 判断几个大月几个小月 46 int allMonthDay = 0; 47 int DayOf_getMonth = 0; 48 49 for (int i = 1; i <= getMonth; i++) { 50 int day = 0; 51 switch (i) { 52 case 1: 53 case 3: 54 case 5: 55 case 7: 56 case 8: 57 case 10: 58 case 12: 59 day = 31; 60 break; 61 case 4: 62 case 6: 63 case 9: 64 case 11: 65 day = 30; 66 break; 67 case 2: 68 if (isRight == 366) { 69 day = 29; 70 } else { 71 day = 28; 72 } 73 break; 74 }// 算今年这几个月有多少天 不加上要的那个月的天数 75 if (i == getMonth) { 76 // 得到输入那个月的天数 77 DayOf_getMonth = day; 78 79 } else { 80 allMonthDay += day; 81 82 } 83 } 84 // 算一下总天数 //出去输入的那个月 85 int totalDays = allYearDay + allMonthDay; 86 // System.out.println(DayOf_getMonth); 87 // System.out.println(allYearDay); 88 // System.out.println(allMonthDay); 89 // System.out.println(totalDays); 90 System.out.print("星期天 " + "星期一 " + "星期二 " + "星期三 " + "星期四 " + "星期五 " + "星期六 "); 91 System.out.println(); 92 /* 93 * 要算星期几,得有已知条件:如2014年1月1日是星期三,那么2015年1月1日是星期几 94 * 计算方法:先求出天数,(也就是2014年1月1日过多少天是2015年1月1日:365天) 95 * 再求余数,(则365÷7=52周余1天),最后算日期:余数+星期几=1+3=4,也就是星期四 96 */ 97 int firstDay = totalDays % 7 + 1;// firstDay是星期几 98 // 记一下空格数,用来换行 99 int isFlag = 0; 100 for (int j = 0; j < firstDay; j++) { 101 isFlag++; 102 System.out.print(" "); 103 } 104 for (int m = 1; m <= DayOf_getMonth; m++) { 105 if (m < 10) { 106 System.out.print(" " + m + " "); 107 } else { 108 System.out.print(m + " "); 109 } 110 if ((isFlag + m) % 7 == 0) { 111 System.out.println(); 112 113 } 114 115 } 116 117 } 118 }