核心邏輯:
(總天數 + 1) % 7(0=周日)。import java.util.Scanner;
public class CalendarDemo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("請輸入年份:"); int year = sc.nextInt();
System.out.print("請輸入月份:"); int month = sc.nextInt();
// 1. 判斷閏年
boolean leap = (year % 400 == 0) || (year % 4 == 0 && year % 100 != 0);
System.out.println(year + "年是" + (leap ? "閏年" : "平年"));
// 2. 計算 1900 年至今年年初總天數
int totalDays = 0;
for (int y = 1900; y < year; y++) {
totalDays += ((y % 400 == 0) || (y % 4 == 0 && y % 100 != 0)) ? 366 : 365;
}
// 3. 計算本年 1 月至上月總天數
int monthDays = 0;
for (int m = 1; m < month; m++) {
switch (m) {
case 1: case 3: case 5: case 7: case 8: case 10: case 12: monthDays += 31; break;
case 4: case 6: case 9: case 11: monthDays += 30; break;
case 2: monthDays += leap ? 29 : 28; break;
}
}
totalDays += monthDays;
// 4. 該月天數
int days;
switch (month) {
case 1: case 3: case 5: case 7: case 8: case 10: case 12: days = 31; break;
case 4: case 6: case 9: case 11: days = 30; break;
case 2: days = leap ? 29 : 28; break;
default: System.out.println("月份錯誤"); return;
}
// 5. 計算 1 號星期幾
int firstWeekDay = (totalDays + 1) % 7; // 0=Sun ... 6=Sat
// 6. 打印表頭
System.out.println("日\t一\t二\t三\t四\t五\t六");
// 前導空格
for (int i = 0; i < firstWeekDay; i++) System.out.print("\t");
// 打印日期
for (int d = 1; d <= days; d++) {
System.out.print(d + "\t");
if ((d + firstWeekDay) % 7 == 0) System.out.println();
}
}
}
請輸入年份:2024 請輸入月份:5 2024年是閏年 日 一 二 三 四 五 六 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
(y%400==0) || (y%4==0 && y%100!=0)。\t 對齊,%7 換行。