0

有人可以解释 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..");
        }
    }
}
4

6 回答 6

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 整除。

于 2012-12-26T13:45:54.150 回答
1
year % 4 == 0 && ( year % 100 != 0 || year % 400 == 0 )

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

此处,评估遵循短路方法

A && B中,仅当 A 评估为真时才评估 B,否则不评估 B

A || B中,仅当 A 为假时才会评估 B,否则无论 A 的结果如何,结果都会为真。

于 2012-12-26T13:45:09.130 回答
0

如果你使用m % n == 0它的意思是,m可以被 整除n。其余的遵循公历的定义,即每 4 年(精确倍数),但不是每 100 年,除非它是每 400 年。例如,2000 年是闰年。2100不会。

这为您提供了平均 365.2425 天的一年。

于 2012-12-26T13:45:01.183 回答
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);
于 2012-12-26T13:45:14.433 回答
0

这是来自维基百科的闰年计算算法的伪代码:

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和运算符在一行中执行算法||并正确分组操作数

于 2012-12-26T13:46:27.037 回答
0

闰年是任何可以除以除以除以除以除以除以除以除以除以除以之外4的任何年。这里使用模算术来检查测试年份是否均匀地分为这两个数字。100400

于 2012-12-26T13:47:21.903 回答