其他声明不打印行?

Else statement not printing line?

我写了一个简单的程序,它应该显示用户输入的 int 是否是闰年,如果是,那么闰年是多少。

在程序的 运行 期间,每当输入不应该是闰年的数字时,它不会打印 else 语句。

注意:这是在 IDE BlueJ 中编写的,因此 io 是自动导入的,因此我没有导入它的原因

/**
 * Reads a user inputted integer value and determines if it is a leap year
 * Created by Oh boy I suck at this
 * 9 September 2019
 */

import java.util.Scanner;

public class LeapYear
{
    public static int getYear(String prompt)
    {
        String newLine = System.getProperty("line.separator");
        int value = 0;
        boolean flag = true;
        while (flag)
        {
            Scanner scan = new Scanner(System.in);
            System.out.println(prompt + ": ");
            try
            {
                value = scan.nextInt();
                flag = false;
            }
            catch(java.util.InputMismatchException e)
            {
                System.out.println("What you have inputed was not an int.");
                System.out.println(newLine);
            }
        }
        return value;
    }

    public static void main (String[] args)
    {
        int year = getYear("Input the year ");
        final int leapYear = year/4;
        if(year % 4 == 0){
            if(year % 100 >= 1){
                if(year % 400 >= 1){
                    System.out.println("The year inputted: " + year + " is equivilant to " + leapYear + " leap year(s).");
                }
                else{
                    System.out.println("The year inputted: " + year + " is not a leap year.");
                }
            }
        }
    }
}

让我们看看你的 if 语句,并记住闰年的规则。

了解闰年

一般来说,闰年是可以被四整除的年份,也就是说 year % 4 == 0 为真。

但是:如果年份不是闰年,当它可以被 100 整除时。即year % 100 == 0 为真。

例外:当它也可以被 400 整除时,即 year % 400 == 0 为真 - 那么我们有一个闰年。

基本上:被 4 整除得到一个候选 - 然后您必须进一步研究它才能做出最终决定。

决策树

  1. 是闰年吗? year % 4 == 0 否则:显示 "not a leap year"
  2. 是否有闰年例外(每 100 年)? year % 100 == 0 否则:显示 "not a leap year"
  3. 是否是闰年异常异常(每400年一次)? year % 400 == 0 True => 显示 "leap year",False => 显示 "not a leap year"

您的实施

我们先看看你的if声明。

  1. 您的第一个 if 语句检查年份是否可以被 4 整除。这是为了让您知道您是否与闰年候选人打交道。所以这是正确的 - 但是你忘了处理这种情况,当年份不是闰年时(所以你在这里错过了可能的"is not a leap year"输出)

  2. 现在有点混乱了。您检查年份是否不能被 100 整除。如果候选闰年不能被 100 整除,则为闰年。所以可以输出成功,但是要处理"else"的情况。

  3. 第三个if嵌套在错误的if块中。它属于父级的 else 块。

提示

尝试了解输入和输出之间的关系,并尝试找出每一个 if / else。

每当你写一个 if 时,想想你是否需要相应的 else 块。

如果事情变得奇怪,尝试 "trace" 你的程序 "breadcrumb outputs": System.out.println("1"); System.out.println("2"); ... 在处理分支或循环的每一行(if、else、switch、while...),这将跟踪程序在命令行上执行的每一步。您可以使用它,直到您的学校鼓励您使用适当的 IDE.

别忘了:熟能生巧 ;)

伪代码(剧透)

只有在完全卡住时才使用它。

if (year % 4 == 0) { // this might be a leap year - we need to dig further if (year % 100 == 0) { if (year % 400 == 0) { print "leap year" } else { print "not a leap year" } } else { print "leap year" } } else { print "not a leap year" }

底线

您的某些逻辑不正确,您忘记实现 else 分支。

HTH