java - Java:闰年/if语句中的优先级问题
问题描述
我正在尝试确定给定年份是否为闰年。但是当您使用 1996 年闰年测试程序时,它表明 1996 年不是闰年:
import javax.swing.JOptionPane;
public class Leapyear{
public static void main (String[] args){
var year = Integer.parseInt(JOptionPane.showInputDialog("Year: "));
if(year%4==0
&& year%100!=0
^year%4==0
&& year%100==0
&& year%400==0){
JOptionPane.showMessageDialog(null,
year + " is a leapyear!");
}
else{
JOptionPane.showMessageDialog(null,
year + " is not a leapyear!");
}
}
}
至于我:我认为这是一个优先级问题,因为 ^ 的优先级是 8 而 && 的优先级是 10,所以它会按以下顺序检查条件(以 ^ 开头):
if(year%4==0 && (year%100!=0 ^ year%4==0) && year%100==0 && year%400==0){..}
我认为这就是为什么当您使用 1996 测试程序时,它不会执行 if 语句中的代码,而是执行 else 语句中的代码。如果是这样,是否有可能首先检查 ^ 之前的条件?
非常感谢您的帮助!
解决方案
条件可以简化:
boolean isLeapYear = (year % 400 == 0) || ((year % 4 == 0) && (year % 100 != 0));
推荐阅读
- batch-file - 无法使用批处理文件在 atom 中完全自动化创建和打开 p5.js 项目
- javascript - 如何调整 css div 表以使多行文本很好地适合?
- sql - 在 SQL 查询中反转条件
- json - 如何使用 Scala SprayJSON 反序列化复杂的 JSON?
- wso2 - SSOAgentException:SAML 响应的签名验证失败
- r - 预测时使用 R 的 h2o.randomforest 中的警告消息
- node.js - Facebook API 错误 2069006“用户看不到此应用程序”
- c# - 在 EF Code First 中使用动态导航属性或 BaseEntity
- c++ - 未使用 WinAPI 安装字体
- react-native - 使用嵌套数组进行本机反应的嵌套渲染