我编写了一个简单的程序,该程序应该显示用户输入的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.");
}
}
}
}
}
答案 0 :(得分:1)
让我们看看您的if语句,并记住leap年的规则。
通常,a年是可以被四整除的年份,即语句year % 4 == 0
为真。
但是:如果一年不是a年,则可以将其整除为100。 year % 100 == 0
是真的。
例外:如果该数值也可以除以400,即year % 400 == 0
为真-那么我们就有了have年。
基本上:可被四整除产生一个候选-您必须进一步研究它才能做出最终决定。
year % 4 == 0
否则:显示“不是a年” year % 100 == 0
否则:显示“不是a年” year % 400 == 0
True =>显示“ le年”,False =>显示“非a年” 让我们首先看看您的if
语句。
您的第一条if语句检查年份是否可被四整除。这样一来,您便知道是否要应对a年候选人。所以这是正确的-但是,当年份不是a年时,您忘了处理此案(因此您错过了可能的“不是a年”输出)
< / li>现在有点混乱了。您检查年份是否不能被100整除。如果a年候选者不能被100整除,则表示IS年。因此,您可以输出成功,但必须处理“其他”情况。
第三个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