Java条件语句(足够简单)

时间:2015-10-13 21:10:14

标签: java conditional

我的程序是告诉您输入的年份是否符合这些要求的闰年:

如果一年可以被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)不存在时才有效。为什么我的程序无法正常工作?

3 个答案:

答案 0 :(得分:1)

考虑输入年份100时会发生什么。 100 % 4 ==0TRUE,因此您的代码输出年份为闰年。问题是,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吧。我只是无法正确打印。关闭?