Java 闰年代码问题


import java.util.Scanner;
public class Hw2JamesVaughn  {
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);        
        System.out.print("Enter a year: ");
        int year = input.nextInt();
        if((year < 1582) == (year % 4==0))
            System.out.println(year + " is a leap year");
        else
            System.out.println(year + " is not a leap year");
        if((year > 1582) == (year % 100 != 0) || (year % 400 == 0))
            System.out.println(year + " is a leap year");
        else
            System.out.println(year + " is not a leap year");
    }                
}

这是作业。

(若要确定特定年份是否为闰年,请使用以下逻辑:

  • 年份必须能被 4 整除
  • 从1582年开始,如果年份能被100整除,也必须能被400整除因此,1700年不是闰年,但2000年是。然而,1500 年是闰年,因为它是在1582年之前,公历的采用年。您的程序将询问一年,然后显示该年份是否为闰年。

我已经通过我的 java 闰年程序走到了这一步,但它不起作用!我一直在研究这个问题,我不知道出了什么问题。

首先,此if((year < 1582) == (year % 4==0))检查布尔相等性。我想你想要一个if((year < 1582) && (year % 4==0))但恐怕这仍然不能解决你的逻辑。

我建议你从创建一个方法开始。第一部分应测试year是否小于 1582。如果是这样,如果它是 4 的倍数,则返回 true。第二部分在维基百科上有很好的描述。把它放在一起会得到类似的东西,

private static boolean isLeapYear(int year) {
    if (year < 1582) {
        return (year % 4 == 0);
    }
    /*
     * Rest of algorithm from: http://en.wikipedia.org/wiki/Leap_year
     */
    if (year % 4 != 0) {
        /*
         * if (year is not divisible by 4) then (it is a common year)
         */
        return false;
    } else if (year % 100 != 0) {
        /*
         * else if (year is not divisible by 100) then (it is a leap year)
         */
        return true;
    }
    /*
     * else if (year is not divisible by 400) then (it is a common year)
     * else (it is a leap year)
     */
    return (year % 400 == 0);
}

然后你可以使用 printf 输出结果,

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    System.out.print("Enter a year: ");
    int year = input.nextInt();
    System.out.printf("%d %s leap year", year, isLeapYear(year) ? "is a"
            : "is not a");
}

最后,你的原始代码可以像这样实现——

if (year < 1582 && year % 4 == 0)
    System.out.println(year + " is a leap year");
else if (year < 1582)
    System.out.println(year + " is not a leap year");
else if (year >= 1582 && (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");

除了算法之外,您还可以使用java内置的日历api计算闰年。

static boolean isLeapYear(int year){
    Calendar calendar= Calendar.getInstance();
    calendar.set(Calendar.YEAR,year);
    return calendar.getActualMaximum(Calendar.DAY_OF_YEAR) > 365;
}

最新更新