调用GergorianCalendar.isLeapYear()时可以使用变量吗?

时间:2014-11-30 16:45:52

标签: java gregorian-calendar

如果我使用:

GregorianCalendar cal = (GregorianCalendar) GregorianCalendar.getInstance();
boolean yearIsLeapYear = cal.isLeapYear(2016);

然后我的varialbe yearIsLeapYear被正确设置为true。但是,如果我用一个变量来代替2016,它就不起作用了。

int year = 2016;
GregorianCalendar cal = (GregorianCalendar) GregorianCalendar.getInstance();
boolean yearIsLeapYear = cal.isLeapYear(year);

我是否遗漏了某些内容或是否无法将变量传递给isLeapyYear()方法?在程序中我写的年份字段中的值可以根据用户输入而改变,而我正在实现的最终算法需要在当前年份是闰年或下一年是闰年时表现不同。我认为这是执行检查的简单方法。

修改显示完整代码

字段是:

private int year;
private boolean yearIsLeapYear , nextYearIsLeapYear, previousYearIsLeapYear;

我有一个构造函数如下:

public FirstDayOfSummer(int currentYear) {
    year = currentYear;
    checkForLeapYears();
}

以下是我在构造函数中调用的方法:

private void checkForLeapYears(){
    GregorianCalendar cal = (GregorianCalendar) GregorianCalendar.getInstance();

    //checking for a leap year using the current value of "year"
    if(cal.isLeapYear(year)){
        yearIsLeapYear = true;
    }
    else{
        yearIsLeapYear = false;
    }

    //checking for a leap year using the value of "year" + 1
    if(cal.isLeapYear(year + 1){
        nextYearIsLeapYear = true;
    }
    else{
        nextYearIsLeapYear = false;
    }

    //checking for a leap year using the value of "year" - 1
    if(cal.isLeapYear(year - 1){
        previousYearIsLeapYear = true;
    }
    else{
        previousYearIsLeapYear = false;
    }

}

1 个答案:

答案 0 :(得分:0)

错误在于调用我的构造函数。

FirstDayOfSummer currentYearFirstDayOfSummer = new FirstDayOfSummer(Calendar.getInstance().get(Calendar.YEAR));
currentYearFirstDayOfSummer.setYear(2015);

我意外地在构造函数中使用当前年份,然后尝试使用mutator方法将其更改为其他内容。因为检查闰年的方法只是在构造函数中调用而不是在mutator中调用,所以它永远不会更新我的布尔值!

感谢您提出好问题!