闰年的重复代码

Repeating code for leap year

我已经知道如何检查闰年了,像这样:

import java.util.*;

public class LeapYear {
    public static void main(String[] args) {
        int year;
        {
            Scanner scan = new Scanner(System.in);
            System.out.println("Enter year: ");
            year = scan.nextInt();

            if ((year % 4 == 0) && year % 100 != 0) {
                System.out.println(year + " is a leap year.");
            } else if ((year % 4 == 0) && (year % 100 == 0)
                    && (year % 400 == 0)) {
                System.out.println(year + " is a leap year.");
            } else {
                System.out.println(year + " is not a leap year.");
            }
        }
    }
}

但现在我想重复这段代码。我以前见过重复的代码片段,我几乎可以成功使用任何代码片段,但是这个给我带来了麻烦。

import java.util.Scanner;

public class LeapUpgrade
{

    public static void main(String[] args)

    {
        String another = "y";
        int year;

        Scanner scan = new Scanner(System.in);

        while (another.equalsIgnoreCase("y")) 
        {
            System.out.println("Enter year: ");
            year = scan.nextInt();

            if ((year % 4 == 0) && year % 100 != 0) 
            {

                System.out.println(year + " is a leap year.");
                System.out.print("test another (y/n)? ");
                another = scan.nextLine();

            }

            else if ((year % 4 == 0) && (year % 100 == 0)
                    && (year % 400 == 0)) 
            {

                System.out.println(year + " is a leap year.");
                System.out.print("test another (y/n)? ");
                another = scan.nextLine();

            } 

            else 

            {

                System.out.println(year + " is not a leap year.");
                System.out.print("test another (y/n)? ");
                another = scan.nextLine();
            }

        }
    }
}

我在这里做错了什么? 在此先感谢您的帮助,不要判断。

为避免重复,将代码行封装在一个方法中即可

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

你可以这样称呼它

if(LeapYear.isLeapYear(year)){
 System.out.println("Leap year");
}else{
 System.out.println("Not a leap year");
}

编辑: 请参阅 Rohan 的回答。为了模块化和 cleanliness/readability 代码更好。


当您想多次执行某项操作时,通常只需要一个循环即可。作为提示,您的循环应该包含这部分代码:

year = scan.nextInt();

if ((year % 4 == 0) && year % 100 != 0) {
    System.out.println(year + " is a leap year.");
} else if ((year % 4 == 0) && (year % 100 == 0) && (year % 400 == 0)) {
    System.out.println(year + " is a leap year.");
} else {
    System.out.println(year + " is not a leap year.");
}

我会把循环类型和条件留给你。