使用逻辑运算符计算闰年

时间:2012-12-26 13:37:11

标签: java

有人可以解释if语句的条件吗? 我知道&&||的作用,但现在我不明白它是如何正确计算的。我通过侥幸得到了正确的结果,我只是想明白它为什么会这样做。

import java.util.Scanner;

public class LeapYear {

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

        System.out.print("Give year: ");
        int year = Integer.parseInt(lukija.nextLine());
        if (year % 4 == 0 && ( year % 100 != 0 || year % 400 == 0 ) ) { 
            System.out.println("Year is leap year");
        } else {
            System.out.println("Year is not a leap year..");
        }
    }
}

6 个答案:

答案 0 :(得分:2)

if

的第一部分
    //this one----//
if (year % 4 == 0 && ( year % 100 != 0 || year % 400 == 0 ) )

确定年份实际上是否为闰年。它们在四年后每年发生,这就是为什么第一次检查验证年份除以4的模数为零的原因。

然后,第二部分每100年(不是闰年)测试类似的东西

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

每400年例外,当年实际上是闰年。

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

长话短说,这句话定义了year变量代表闰年,它可以完全除以4而不是100,除非它也可以被400完全整除。

答案 1 :(得分:0)

如果您使用m % n == 0,则表示m可被n整除。其余的遵循格里高利历的定义,每4年(确切的倍数),但不是每100个,除非每400个。例如2000年是闰年。 2100年不会。

这给你一年平均365.2425天。

答案 2 :(得分:0)

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

year % k ==0表示年份可以被k整除。

此处,评估遵循短路方法

A && B中,只有在A评估为真的情况下才会评估B,否则B不会被评估

A || B中,只有在A为假的情况下才会评估B,否则无论A的结果如何,结果都是真的。

答案 3 :(得分:0)

// divisible by 4
isLeapYear = (year % 4 == 0);

// divisible by 4 and (divisible by not 100 or divisible by 400 (any one should be true))
isLeapYear = isLeapYear && (year % 100 != 0 || year % 400 == 0);

答案 4 :(得分:0)

这是从wikipedia获取的闰年计算算法的伪代码:

if year modulo 400 is 0 then
   is_leap_year
else if year modulo 100 is 0 then
   not_leap_year
else if year modulo 4 is 0 then
   is_leap_year
else
   not_leap_year

条件是仅使用java &&||运算符在一行中执行算法并正确分组操作数

答案 5 :(得分:0)

leap year4可以平均除以100的任何年份,除非400可以均匀地除以{{1}},除非{{1}}可以平均除以{{1}} }。这里使用模运算来检查测试年份是否均匀地划分为这两个数字。