有人可以解释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..");
}
}
}
答案 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 year是4
可以平均除以100
的任何年份,除非400
可以均匀地除以{{1}},除非{{1}}可以平均除以{{1}} }。这里使用模运算来检查测试年份是否均匀地划分为这两个数字。