7
import java.util.Scanner;

public class Hw2JamesVaughn  {
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);        
        System.out.print("Enter a year: ");
        int year = input.nextInt();
        if((year < 1582) == (year % 4==0))
            System.out.println(year + " is a leap year");
        else
            System.out.println(year + " is not a leap year");

        if((year > 1582) == (year % 100 != 0) || (year % 400 == 0))
            System.out.println(year + " is a leap year");
        else
            System.out.println(year + " is not a leap year");

    }                
}

这是任务。

(要确定特定年份是否为闰年,请使用以下逻辑:

  • 年份必须能被 4 整除
  • 从 1582 年开始,如果年份能被 100 整除,那么它也必须能被 400 整除,因此,1700 年不是闰年,但 2000 年是。然而,1500 年是闰年,因为它早于 1582 年,即公历的采用年。您的程序将询问一年,然后显示该年是否为闰年。)

我的java闰年计划已经做到了这一点,但它不起作用!我一直在努力,我不知道出了什么问题。

4

2 回答 2

1

首先,这将if((year < 1582) == (year % 4==0))检查布尔相等性。我想你想要一个,if((year < 1582) && (year % 4==0))但恐怕这仍然不能解决你的逻辑。

我建议你从创建一个方法开始。第一部分应该测试 是否year小于 1582。如果是,如果它是 4 的倍数,则返回 true。第二部分在Wikipedia here上有很好的描述。把它放在一起会得到类似的东西,

private static boolean isLeapYear(int year) {
    if (year < 1582) {
        return (year % 4 == 0);
    }
    /*
     * Rest of algorithm from: http://en.wikipedia.org/wiki/Leap_year
     */
    if (year % 4 != 0) {
        /*
         * if (year is not divisible by 4) then (it is a common year)
         */
        return false;
    } else if (year % 100 != 0) {
        /*
         * else if (year is not divisible by 100) then (it is a leap year)
         */
        return true;
    }
    /*
     * else if (year is not divisible by 400) then (it is a common year)
     * else (it is a leap year)
     */
    return (year % 400 == 0);
}

然后你可以使用printf输出结果,

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    System.out.print("Enter a year: ");
    int year = input.nextInt();
    System.out.printf("%d %s leap year", year, isLeapYear(year) ? "is a"
            : "is not a");
}

最后,您的原始代码可以像 -

if (year < 1582 && year % 4 == 0)
    System.out.println(year + " is a leap year");
else if (year < 1582)
    System.out.println(year + " is not a leap year");
else if (year >= 1582 && (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)))
    System.out.println(year + " is a leap year");
else
    System.out.println(year + " is not a leap year");
于 2014-09-01T21:37:57.803 回答
0

除了算法之外,您还可以使用 java 内置的 Calendar api 计算闰年。

static boolean isLeapYear(int year){
    Calendar calendar= Calendar.getInstance();
    calendar.set(Calendar.YEAR,year);
    return calendar.getActualMaximum(Calendar.DAY_OF_YEAR) > 365;
}
于 2014-09-02T07:23:20.717 回答