java - 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");
}
}
}
解决方案
您的陈述与您期望的不太一样:
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。
推荐阅读
- java-native-interface - 我是否需要 DeleteLocalRef 由 JNI 调用返回的 jstring 对象?
- python - 部署时从 Anaconda 中排除开发包
- node.js - 如何使用 api 在 google 表格中查找值,用于 Node JS
- ssas - MDX 聚合和 where 子句基础知识
- .net - 使用 windows api 获取 windows mp3 文件属性或标签?
- python - 在一维数组'a'中找到'a'的索引'a'='b',其中'b'是'a'的随机值
- php - 可以在PHP中导入魔术常量吗
- php - 迭代数组然后再次重置多个数组
- c# - 如何在主窗口中实现接口
- javascript - 如何将数据放入嵌套数组并将其绑定到 HTML Knockout.js