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

Java 判斷閏年:標準規則與程式碼實作

     編輯:Java 相關知識

閏年規則(格里高利曆)

  1. 能被 4 整除,且 不能被 100 整除 → 閏年。(如 2024, 2020)
  2. 能被 400 整除 → 閏年。(如 2000, 2400)
  3. 其餘為平年。(如 1900, 2100, 2023)

邏輯表達式:(year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)

Java 實作

import java.util.Scanner;

public class LeapYearChecker {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("請輸入年份:");
        long year = sc.nextLong();

        boolean isLeap = isLeapYear(year);
        System.out.println(year + (isLeap ? " 是閏年" : " 不是閏年"));
    }

    /**
     * 判斷閏年
     * @param year 年份 (支援長整數範圍)
     * @return true=閏年, false=平年
     */
    public static boolean isLeapYear(long year) {
        return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
    }
}

JDK 8+ 現代寫法

import java.time.Year;
import java.time.chrono.IsoChronology;

public class ModernLeapYear {
    public static void main(String[] args) {
        int year = 2024;
        // 方式 1:Year 類
        boolean leap1 = Year.of(year).isLeap();
        // 方式 2:Chronology
        boolean leap2 = IsoChronology.INSTANCE.isLeapYear(year);
        System.out.println(year + " -> " + leap1);
    }
}

常見錯誤

  • 只判斷 year % 4 == 0 → 1900 會被誤判為閏年。
  • 使用 int 接收年份,若處理古曆/未來遠年份可能溢位,建議用 long 或 Year。

延伸:某年某月天數

public static int daysInMonth(int year, int month) {
    switch (month) {
        case 2: return isLeapYear(year) ? 29 : 28;
        case 4: case 6: case 9: case 11: return 30;
        default: return 31;
    }
}
// 或直接用 YearMonth.of(year, month).lengthOfMonth() (JDK 8+)

總結

閏年判斷是經典邏輯練習,掌握「400 年 97 次閏」的規則並正確轉為布林表達式是關鍵。實務開發中,優先使用 java.time 套件,避免手寫邏輯出錯。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved