c语言编程笔录

首页 >   > 笔记大全

笔记大全

使用Java怎么实现判断年份的平闰

更新时间:2023-07-13

第一段:年份平闰判断的基本原理

关于年份的平闰,最基本的判断原理就是,每四年一闰,百年不闰,四百年再闰。这意味着,当年份是闰年时,它可以被4整除,但不可以被100整除;或者可以被400整除。在Java中,我们可以通过取模运算符%来判断一个数字是否可以被另一个数字整除。因此,我们可以使用这个方法来编写判断年份平闰的Java程序。


public class LeapYear {
    public static boolean isLeapYear(int year) {
        return (year % 4 == 0) && (year % 100 != 0 || year % 400 == 0);
    }

    public static void main(String[] args) {
        int year = 2024;
        if (isLeapYear(year)) {
            System.out.println(year + "年是闰年");
        } else {
            System.out.println(year + "年是平年");
        }
    }
}

在这个程序中,我们定义了一个isLeapYear方法,它接受一个整数年份作为参数,并使用一行代码来判断该年份是否是闰年。我们还在main方法中调用了此方法,并打印出结果。

第二段:异常处理

在编写代码时,我们应该考虑到可能出现的异常情况。例如,当用户输入一个不合法的年份时,我们应该如何处理这个异常呢?在Java中,我们可以使用try-catch语句来处理异常。


public class LeapYear {
    public static boolean isLeapYear(int year) {
        if (year < 0) {
            throw new IllegalArgumentException("年份不能为负数");
        }
        return (year % 4 == 0) && (year % 100 != 0 || year % 400 == 0);
    }

    public static void main(String[] args) {
        int year = -2024;
        try {
            if (isLeapYear(year)) {
                System.out.println(year + "年是闰年");
            } else {
                System.out.println(year + "年是平年");
            }
        } catch (IllegalArgumentException e) {
            System.out.println("输入的年份不合法:" + e.getMessage());
        }
    }
}

在这个程序中,我们在isLeapYear方法中添加了一个判断,如果年份小于0,则抛出 IllegalArgumentException 异常,并传递一个错误消息。在main方法中,我们使用 try-catch 语句来捕获此异常,并在控制台中打印错误消息。

第三段:优化代码

当我们编写程序时,优化代码是非常重要的。在这个例子中,我们可以将判断是否是闰年的代码重构一下,使它更加清晰和易读。


public class LeapYear {
    public static boolean isLeapYear(int year) {
        if (year < 0) {
            throw new IllegalArgumentException("年份不能为负数");
        }
        if (year % 4 == 0) {
            if (year % 100 == 0) {
                if (year % 400 == 0) {
                    return true;
                }
                return false;
            }
            return true;
        }
        return false;
    }

    public static void main(String[] args) {
        int year = 2024;
        if (isLeapYear(year)) {
            System.out.println(year + "年是闰年");
        } else {
            System.out.println(year + "年是平年");
        }
    }
}

在这个程序中,我们使用了三个嵌套的 if 语句来判断年份是否是闰年,使它更接近于日常生活中的思维方式。虽然这使得代码看起来较长,但是它更加易读和清晰。

第四段:使用枚举类型

在某些情况下,我们可能需要用到枚举类型。在这个例子中,我们可以使用一个 Enum 枚举类型来表示一个年份是“平年”还是“闰年”,并将它作为返回值。


public enum LeapYear {
    LEAP("闰年"),
    COMMON("平年");

    private final String typeName;

    LeapYear(String typeName) {
        this.typeName = typeName;
    }

    public String getTypeName() {
        return typeName;
    }

    public static LeapYear of(int year) {
        if (year < 0) {
            throw new IllegalArgumentException("年份不能为负数");
        }
        return (year % 4 == 0) && (year % 100 != 0 || year % 400 == 0) ? LEAP : COMMON;
    }
}

public class Test {
    public static void main(String[] args) {
        int year = 2024;
        LeapYear leapYear = LeapYear.of(year);
        System.out.println(year + "年是" + leapYear.getTypeName());
    }
}

在这个程序中,我们定义了一个 Enum 枚举类型,它包含两个实例:LEAP 表示“闰年”,COMMON 表示“平年”。枚举类型也可以包含构造函数和方法,我们可以使用 getTypeName 方法获取实例的类型名。我们还实现了一个静态方法of,它接受一个年份作为参数,并返回一个 LeapYear 实例。在 main 方法中,我们调用了 of 方法来获取年份的类型,并将其打印到控制台中。