Нужна помощь в понимании этого кода переключателя - Дни месяцев

В данный момент я изучаю Java, и у меня есть некоторые проблемы с пониманием использования переключателя здесь. Я был бы очень признателен, если бы кто-то мог объяснить мне это просто. Итак, вот код:

 public class SwitchDemo2 {
 public static void main(String[] args) {
int month=3; 
int year=2000;
int NumDays=0;
switch(month) {
case 1: case 3: case 5: case 7: case 8: case 10:
case 12: NumDays=31; break;
case 4: case 6: case 9: case 11: NumDays=30;
break;
case 2: if ( ( (year%4 == 0) && !(year%100==0) ) ||
(year%400==0))
    NumDays=29;
else NumDays=28;
break;
default: System.out.println("Invalid month.");
break;}
System.out.println("Number of Days= "+NumDays);
 }}

Чего я не понимаю, так это определения после случая 2. "year%4==0" - хорошо, это имеет смысл, это високосный год, но как насчет !(year%100==0) или (year%400 ==0) ? Почему мы это используем?

Заранее спасибо!


person Yoana    schedule 10.02.2014    source источник
comment
en.wikipedia.org/wiki/Leap_year#Algorithm   -  person assylias    schedule 10.02.2014
comment
en.wikipedia.org/wiki/Leap_year — это часть определения високосного года.   -  person Hari Menon    schedule 10.02.2014
comment
мод 100 и 400 является частью определения високосных лет   -  person Eduard Gamonal    schedule 10.02.2014


Ответы (1)


По определению високосного года:

если год делится на 400, то is_leap_year иначе, если год делится на 100, то not_leap_year иначе, если год делится на 4, то is_leap_year иначе not_leap_year

person Pankaj    schedule 10.02.2014