创建闰年程序(包括世纪)

Creating Leap Year program (Century included)

我是第一年,所以我真的是个新手,我们的作业是 –

By definition a leap year is any year that is divisible by 4. However if a year is a century year it is only a leap year if it is divisible by 400. Write a Java program that will input a year and determine if the year is leap year of not.

另外,由于世纪年份未知,我也必须根据输入的年份来计算它。我在网上看了一个答案,我认为是正确的——获取年份的前 2 位数字然后加 1。

我可以只使用 if/else 吗?

我不知道该怎么做。提交是在今天之后的一天。请帮忙!

我的代码看起来像这样,我知道它缺少世纪。

import java.util.Scanner;
import java.io.*;

class leapyear
{
        public static void main(String[] a)
    {
        Scanner in = new Scanner (System.in);
        int year, centuryyear;
        System.out.print("Please enter a year: ");
        year = in.nextInt();

        if ((year % 4 == 0) && centuryyear % 400 == 0)
            {
            System.out.println(year + " Is a Leap Year");
            year++;
            }   
        else
            {
            System.out.println(year + " Is not a leap year");
            year++;
            }
    }
}

我不会帮你做作业的。我建议您先从逻辑上分解问题,然后再尝试编写代码。

先用英文写条件,再写代码去匹配,比如:

it is a leap year if: the year is divisible by 4 unless it is also divisible by 100 unless.... etc etc

一旦像这样写下来,它可能会使逻辑更容易理解,然后更容易编码。

您应该考虑以下提示:

  1. year % 4 == 0只表示如果不是世纪年就是闰年
  2. 变量 centuryyear 没有用,可以从您的程序中删除。
  3. 能被100整除的年份为世纪年
  4. 你知道 OR 运算符 || 吗?

然后按照 Sam Holder 的建议进行操作。

Can I use the if/else only?

是的,你可以。一个建议。您可以使用嵌套的 if~else 块。您没有理由只找到一个正确的 if 条件。

if (...) {
    if (...) {
        ...
    }
} else {
    if (...) {
        ...
    }
}

当然你可以使用if~else if代替嵌套if~else

if (... && ...) {
    ...
} else if (... && ...) {
    ...
}

最后这也是等价的(单个但嵌套的 if 条件):

if ((... && ...) || (... && ...)) {
    ...
}

您不需要使用单独的 "century year" 变量。您只需要测试年份,看看它是否符合标准。标准:

能被 4 整除但不能被 100 整除除非也能被 400 整除

您已经知道如何使用 % 来测试这些条件,所以让我们分别看一下它们:

能被 4 整除的年份为:年份 % 4 == 0

不能被 100 整除是:年份 % 100 != 0

但能被 400 整除的是:year % 400 == 0

所以我们需要第一个表达式和第二个表达式或第三个表达式:

if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)