其他声明不打印行?
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 整除得到一个候选 - 然后您必须进一步研究它才能做出最终决定。
决策树
- 是闰年吗?
year % 4 == 0
否则:显示 "not a leap year"
- 是否有闰年例外(每 100 年)?
year % 100 == 0
否则:显示 "not a leap year"
- 是否是闰年异常异常(每400年一次)?
year % 400 == 0
True => 显示 "leap year",False => 显示 "not a leap year"
您的实施
我们先看看你的if
声明。
您的第一个 if 语句检查年份是否可以被 4 整除。这是为了让您知道您是否与闰年候选人打交道。所以这是正确的 - 但是你忘了处理这种情况,当年份不是闰年时(所以你在这里错过了可能的"is not a leap year"输出)
现在有点混乱了。您检查年份是否不能被 100 整除。如果候选闰年不能被 100 整除,则为闰年。所以可以输出成功,但是要处理"else"的情况。
第三个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
我写了一个简单的程序,它应该显示用户输入的 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 整除得到一个候选 - 然后您必须进一步研究它才能做出最终决定。
决策树
- 是闰年吗?
year % 4 == 0
否则:显示 "not a leap year" - 是否有闰年例外(每 100 年)?
year % 100 == 0
否则:显示 "not a leap year" - 是否是闰年异常异常(每400年一次)?
year % 400 == 0
True => 显示 "leap year",False => 显示 "not a leap year"
您的实施
我们先看看你的if
声明。
您的第一个 if 语句检查年份是否可以被 4 整除。这是为了让您知道您是否与闰年候选人打交道。所以这是正确的 - 但是你忘了处理这种情况,当年份不是闰年时(所以你在这里错过了可能的"is not a leap year"输出)
现在有点混乱了。您检查年份是否不能被 100 整除。如果候选闰年不能被 100 整除,则为闰年。所以可以输出成功,但是要处理"else"的情况。
第三个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