【问题标题】:Calculate Leap Year in Java is bypassing an else statement在 Java 中计算闰年绕过了 else 语句
【发布时间】:2020-07-21 20:23:40
【问题描述】:

在我的 30 行代码中一定有一个错误,但我找不到它,这让我发疯了。

如果我使用isLeapYear(2004) 执行此代码,我会收到true

public class LeapYear {

    public static void main(String[] args) {
        isLeapYear(2004);
    }

    public static boolean isLeapYear (int year) {
        boolean status = true;

        if (year >= 0 || year <= 9999) {
            if (year % 4 == 0){
                status = true;
                System.out.println("true");
            } else if (year % 100 == 0){
                status = true;
                System.out.println("true");
            } else if (year % 400 == 0) {
                status = true;
                System.out.println("true");
            } else {
                status = false;
                System.out.println("false");
            }

        } else if (year < 0 || year > 9999){
            status = false;
            System.out.println("false");
        }
        return status;
    }
}

但如果我为isLeapYear(-1200) 运行它,它也会返回一个true,但它不应该。

为什么我的代码绕过 else if (year &lt; 0 || year &gt; 9999)

【问题讨论】:

  • 使第一个||&amp;&amp; -1200 小于 9999
  • 因为-1200小于9999,改成&&
  • 逻辑在多个地方存在缺陷,因为第一个内部 if 也捕获了所有其他情况。 IIRC,规则似乎不正确。除了 %400 之外,%100 应该是假的?!
  • 代码永远不会到达 else if 语句中的任何一个。如果年份能被 100 或 400 整除,那么它也能被 4 整除。您也可以在离开 if/else 之后将 print 语句替换为打印一次 status
  • 您应该真正学习如何使用调试器 - 这会帮助您立即找到问题。

标签: java if-statement return boolean leap-year


【解决方案1】:

您只需将第一个 if 语句更改为:

if (year &gt;= 0 &amp;&amp; year &lt;= 9999) {

-1200 始终低于 9999,因此由于||,它始终处于这种状态。

【讨论】:

    【解决方案2】:

    在 Java 中寻找闰年的 if-else 语句

    public class LeapYear {
    
        public static void main(String[] args) {
            // The desired year to check.
            int year = 1998;
            
            // Implementing our algorithm.
            if (year % 400 == 0) {
                System.out.println(year + " is a leap year.");
            } else if (year % 100 == 0) {
                System.out.println(year + " is not a leap year.");
            } else if (year % 4 == 0) {
                System.out.println(year + " is a leap year.");
            } else {
                System.out.println(year + " is not a leap year.");
            }
            
        }
    }
    

    输出:

    1998 is not a leap year.
    

    参考:Scaler Topics

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-17
      • 1970-01-01
      相关资源
      最近更新 更多