1 public class Demo { 2 public static void main(String[] args) { 3 int totalDay=0; //计算总天数 4 int dayOfWeek; //保存当月第一天是星期几 5 //int day=0 ; //当月的天数 6 int dayOfYear=0; //保存用户输入的年月之前的天数 7 int sum = 0; 8 Scanner sc = new Scanner(System.in); 9 System.out.println("******************欢 迎 使 用 万 年 表******************"); 10 System.out.println("请选择年份:"); 11 int year = sc.nextInt(); 12 System.out.println("请选择月份:"); 13 int month = sc.nextInt(); 14 //计算用户当年1-1后总天数 15 for(int i = 1900; i <year; i++){ 16 if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0){ 17 dayOfYear += 366; 18 } 19 else { 20 dayOfYear += 365; 21 } 22 } 23 int[] day = {31,28,31,30,31,30,31,31,30,31,30,31}; //当年的月 24 if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0){ 25 day[1] = 29; 26 } 27 for (int i = 0; i < month-1; i++){ 28 sum += day[i]; 29 } 30 dayOfWeek = ((dayOfYear + sum) + 1) % 7;//核心:算法 求该月的1号是星期几 (当用户输入的年份1-1 以前的所有天数+该月的天数 +1) %7 31 //打印格式 32 System.out.println("天 一 二 三 四 五 六"); 33 //初始化日历的第一天的位置 34 for (int i = 0; i < dayOfWeek; i++){ 35 System.out.print(" "); 36 } 37 38 for(int i = 1; i <= day[month-1]; i++){ 39 //控制每到星期6就换行,原理为总天数加上当月天数对7取余 40 if (((dayOfYear + sum)+i) % 7 ==6 ){ 41 System.out.print(i+" "); 42 } 43 else { 44 System.out.print(i+" "); 45 } 46 } 47 } 48 }