无效的闰年被评估为有效

时间:2014-12-29 17:12:36

标签: java

我正在使用U赫尔辛基java课程,并且我遇到了闰年示例的问题。

我使用if和else运算符,我的代码似乎是正确的,但它以闰年的形式返回1700,1500。该示例表明,如果它可以被4整除,并且它也可以被100和400整除,则它是闰年。

import java.util.Scanner;

public class LeapYear {

    public static void main(String[] args) {
        Scanner reader = new Scanner(System.in);

        System.out.println("Type a year: ");        
        int year = Integer.parseInt(reader.nextLine());

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

4 个答案:

答案 0 :(得分:2)

boolean isLeapYear = false;
if (year % 4 == 0) {
    isLeapYear = true;
}
if (year % 100 == 0) {
    isLeapYear = false;
}
if (year % 400 == 0) {
    isLeapYear = true;
}

答案 1 :(得分:1)

闰年的规则很简单:

  • 年份必须可被4整除,而不能被100 OR
  • 整除
  • 年份必须可被400整除。

您未使用&&||来完成此操作。

只需做这个改变:

if ( (year % 4 == 0 && year % 100 != 0))
     //^year divisible by 4 and not by 100
     || (year % 400 == 0)
     //  ^ year divisible by 400
   ) {
    //rest of your code...
}

删除评论后,代码将为

if ( (year % 4 == 0 && year % 100 != 0))
     || (year % 400 == 0) ) {
    //rest of your code...
}

由于您是初学者,我强烈建议您在代码中拆分行以便您理解它。一旦你获得更多练习,你将结束这样的写作:

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

答案 2 :(得分:0)

您需要更改“如果'声明:

if(((year % 4 == 0) && (year % 100 !=0))||(year % 400 == 0))

在您当前的“如果'声明,如果第一个条件为真,if语句为真,&如果它是假的,那么你的陈述将是假的。第二个条件根本不起任何作用。

答案 3 :(得分:-2)

1700,1500作为闰年返回,因为if检查不正确。

正确的检查是(year % 400 == 0) || ((year % 4 == 0) && (year % 100 != 0))

有关该算法的更多信息,请访问:Leap Year Algorithm