我的程序是告诉您输入的年份是否符合这些要求的闰年:
如果一年可以被4整除,那么它就是闰年。但如果年份可以被100整除,那么只有当它被400整除时才是闰年。
创建一个程序,检查给定年份是否为闰年。
以下是每个输入应产生的结果:
输入年份:2011年 这一年不是闰年。
输入年份:2012 这一年是闰年。
输入年份:1800 这一年不是闰年。
输入年份:2000 这一年是闰年。
这就是我提出的:
import java.util.Scanner;
public class LeapYear {
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
System.out.println(" Type a year ");
int number = Integer.parseInt(reader.nextLine());
if (number % 4 == 0 ) {
System.out.println(" This is a leap year");
} else if (number % 100 == 0 && number % 400 == 0) {
System.out.println(" This is a leap year ");
} else {
System.out.println( "This is not a leap year");
}
}
}
除了1800之外,所有这些都有效.1800不是闰年,我的程序说它是(它不能被400整除)。似乎(数字%100 == 0&& number%400 == 0)仅在(数字%4 == 0)不存在时才有效。为什么我的程序无法正常工作?
答案 0 :(得分:1)
考虑输入年份100时会发生什么。 100 % 4 ==0
为TRUE
,因此您的代码输出年份为闰年。问题是,100 % 100 == 0
也是TRUE
,但您的代码永远不会到达此行,也不会检查100 % 400 == 0
是否为TRUE
。
在检查所有条件之前打印出结果!
更改if else的结构。
这听起来像是家庭作业,所以我不想给你答案。您应该拥有从此处获取所需的所有信息。如果没有,请随时评论任何问题。
编辑:既然你似乎已经解决了问题的核心,那么你的答案就出现了问题。您的括号{
和}
位于错误的位置,等等。将括号放在我所做的位置是Java标准的一部分,使您的代码更易于阅读,理解和调试。 (这样可以更容易地识别它们何时丢失。)
您的代码应如下所示:
// Pay attention to a few things here. It checks if it is divisible by 4
// since every leap year must be divisible by 4. If it is,
// it checks if it is divisible by 100. If it is, it must also
// be divisible by 400, or it is not a leap year. So, if it is divisible
// by 100 and NOT divisible by 400, it is not a leap year. If it isn't
// divisible by 100, control flows to the else statement, and since we
// already tested number % 4 we know it is a leap year.
// Pay special attention to where I located my { and }, this is the
// standard way to do it in java, it makes your code readable by others.
if(number % 4 == 0) {
if((number % 100 == 0) && !(number % 400 == 0)) { // NOTE THE ! OPERATOR HERE
System.out.println("The year is NOT a leap year.");
} else {
System.our.println("The year is a leap year.");
}
} else {
System.out.println("The year is NOT a leap year");
}
答案 1 :(得分:0)
试试这个
bool isLeap = false;
if (number % 4 == 0) {
isLeap = true;
if (number % 100 == 0)
isLeap = false;
if (number % 400 == 0)
isLeap = true;
}
if (isLeap) { //print stuff
这对你有用。您可以通过提前输出来取代自己的逻辑。
答案 2 :(得分:-1)
import java.util.Scanner;
public class LeapYear {
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
System.out.println(" Type a year ");
int number = Integer.parseInt(reader.nextLine());
if (number % 4 == 0 )
if (number % 100 == 0)
if (number % 400 == 0)
{
System.out.println(" This is a leap year");
} else {
System.out.println( "This is not a leap year");
}
}
}
你去HC吧。我只是无法正确打印。关闭?