首页 > 解决方案 > 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 语句中的代码。如果是这样,是否有可能首先检查 ^ 之前的条件?

非常感谢您的帮助!

标签: javaif-statement

解决方案


条件可以简化:

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

推荐阅读