其他语句不打印行?

时间:2019-10-09 20:24:54

标签: java if-statement bluej

我编写了一个简单的程序,该程序应该显示用户输入的int是否为a年,如果是,则为what年。

在程序运行期间,每当输入不应该是leap年的数字时,它都不会打印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.");
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:1)

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

了解leap年

通常,a年是可以被四整除的年份,即语句year % 4 == 0为真。

但是:如果一年不是a年,则可以将其整除为100。 year % 100 == 0是真的。

例外:如果该数值也可以除以400,即year % 400 == 0为真-那么我们就有了have年。

基本上:可被四整除产生一个候选-您必须进一步研究它才能做出最终决定。

决策树

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

您的实施情况

让我们首先看看您的if语句。

  1. 您的第一条if语句检查年份是否可被四整除。这样一来,您便知道是否要应对a年候选人。所以这是正确的-但是,当年份不是a年时,您忘了处理此案(因此您错过了可能的“不是a年”输出)

    < / li>
  2. 现在有点混乱了。您检查年份是否不能被100整除。如果a年候选者不能被100整除,则表示IS年。因此,您可以输出成功,但必须处理“其他”情况。

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

提示

尝试了解输入和输出如何相互关联,并尝试击中所有if / else。

每当编写if时都要考虑是否需要相应的else块。

如果情况变得很奇怪,请尝试使用“面包屑输出”来“跟踪”您的程序:System.out.println(“ 1”); System.out.println(“ 2”);在处理分支或循环的每一行上(如果,否则,切换,同时...),这将跟踪程序在命令行上执行的每个步骤。您可以使用它,直到学校鼓励您使用适当的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