【问题标题】:Else statement not printing line?其他语句不打印行?
【发布时间】:2020-02-07 05:48:01
【问题描述】:

我编写了一个简单的程序,它应该显示用户输入的 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),有很多非闰年不会打印。
  • 对不起,我直到现在才看到这个,但问题已经解决,感谢您的耐心等待,对于这么晚的回复,我深表歉意。

标签: java if-statement bluej


【解决方案1】:

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

了解闰年

一般来说,闰年是可以被 4 整除的年份,即声明 year % 4 == 0 为真。

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

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

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

决策树

  1. 是闰年候选吗? year % 4 == 0 否则:显示“不是闰年”
  2. 是否是闰年例外(每 100 年)? year % 100 == 0 否则:显示“不是闰年”
  3. 是否是闰年异常异常(每 400 年)? year % 400 == 0 True => 显示“闰年”,False => 显示“非闰年”

您的实施

让我们先看看你的if 声明。

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

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

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

提示

尝试了解输入和输出如何相互关联,并尝试命中每一个 if / else。

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

如果事情变得奇怪,请尝试使用“面包屑输出”“跟踪”您的程序: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

【讨论】:

  • 感谢您的深入回答。当我阅读更多内容时,我终于弄清楚了关于闰年的那部分。我只是一个大笨蛋,忘记了如何正确计算它们。在 else 分支的情况下,我一开始并没有意识到,但现在我要感谢你和其他人。我只有一个 else 分支连接到一个 if 语句,我终于意识到了这一点。因此,我没有嵌套,而是将所有 if 语句组合成一个,并要求将它们传递给打印 if 语句。如果这没有意义,我很抱歉,我的词汇不正常,但我理解这个错误。
  • 但是,是的,你完全正确我忘了实现很多其他分支......说实话我真的不知道嵌套是如何工作的,我只是想继续让我的老师感到自豪先。因此 InputMismatchException 的 try catch 和 while 循环。但是感谢您的贡献,我能够让您找出我做错了什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-04
  • 1970-01-01
  • 2023-04-04
相关资源
最近更新 更多