首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java 實戰:用 if/for 實現萬年曆(完整版)

     編輯:Java 綜合教學

Java 實戰:用 if/for 實現萬年曆(完整版)

核心邏輯:

  1. 計算 1900-01-01 到輸入年份前的總天數。
  2. 計算輸入年份前幾月的總天數。
  3. 推算該月 1 號是星期幾:(總天數 + 1) % 7(0=周日)。
  4. 按每行 7 格打印日期,前補空格對齊。

完整代碼

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)。
  • 累加天數推算星期:基準日 1900-01-01 是周一(驗證可調整)。
  • 格式化輸出利用 \t 對齊,%7 換行。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved