首页 > 解决方案 > If语句中的有缺陷的逻辑

问题描述

我尝试了 1900 年,在我的程序中打印出闰年,但是 1900 年不应该是闰年。有人可以帮助我了解 if 条件背后的逻辑吗?

class LeapYearTrial{
public static void main(String[]args){

   String s;
   int year;

   s = JOptionPane.showInputDialog("Enter year");
   year = Integer.parseInt(s);

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

      JOptionPane.showMessageDialog(null, year + " is a leap year"); 

   } else {

      JOptionPane.showMessageDialog(null, year + " is not a leap year");
      }
   }
}

标签: java

解决方案


您的陈述与您期望的不太一样:

year % 100 == 0 AndAlso
year % 400 == 0 OrElse
year % 4 == 0

对于 1900 年,这将产生以下结果:

true AndAlso
false OrElse
true

这给出了结果true

你可以改用这样的东西:

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

只有当年份可以被 400 整除,或者可以被 4 整除而不被 100 整除时,才会返回 true。


推荐阅读