Java条件语句(足够简单)

Java条件语句(足够简单),java,conditional,Java,Conditional,我的计划是判断输入的年份是否是符合以下要求的闰年: 如果一年可以被4整除,那么它就是闰年。但是如果一年可以被100整除,那么只有当它也可以被400整除时才是闰年 创建一个检查给定年份是否为闰年的程序 以下是每个输入应产生的结果: a类年份:2011年 这一年不是闰年 a类年份:2012年 这一年是闰年 a类年份:1800 这一年不是闰年 a类年份:2000年 这一年是闰年 这就是我想到的: import java.util.Scanner; public class LeapYear {

我的计划是判断输入的年份是否是符合以下要求的闰年:

如果一年可以被4整除,那么它就是闰年。但是如果一年可以被100整除,那么只有当它也可以被400整除时才是闰年

创建一个检查给定年份是否为闰年的程序

以下是每个输入应产生的结果:

a类年份:2011年 这一年不是闰年

a类年份:2012年 这一年是闰年

a类年份:1800 这一年不是闰年

a类年份: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)不存在时才起作用。为什么我的程序不能正常工作?

试试这个

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

那应该对你有用。提前输出是在抢占自己的逻辑。

考虑输入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");
} 
}


给你。我只是不能把它打印好。关闭?

请修复括号,使代码更具可读性!组织您的
if
条款,以便首先执行最大的测试(与400年相比)。否则,由于1800%4==0,它将在
if
语句的第一部分结束计算感谢您的快速响应。我以为第一句话先发制人。我对布尔人了解不多,所以我不确定如果没有他们,这节课是否可以完成。我只得到了关于&&| |操作的信息。布尔值在这里不是你真正的问题;这是你检查条件的顺序。顺便说一下,欢迎来到StackOverflow!谢谢你的帮助,我真的只是在自学Java,并学习一门课程。这一课并没有给出任何关于嵌套ifs的信息。我仔细阅读了它们,发现&&操作是相似的,但仅此而已。我花了很多时间研究这件事……不管怎样,你能让我摆脱痛苦吗?是的,实际上我只是从我读到的东西中试过了。让我再试一次,我会发布我的想法。记住,每一个可以被100整除的数字也可以被4整除;想想这意味着什么,你需要检查东西的顺序。如果您仍然无法获取,我将提供更多帮助。抱歉,我想确保您捕获了我的编辑。你不是说闰年吧?至于其他方面呢?好的,但是打印的语句中不应该有一个是“这不是闰年”吗?你的括号错了。我将编辑我的答案,向您展示它应该是什么样子。
    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");
    } 
}