2014-11-30 1 views
1

Если я использую:Можете ли вы использовать переменные при вызове GergorianCalendar.isLeapYear()?

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

Тогда мой varialbe yearIsLeapYear правильно установлен верно. Однако, если я использую переменную вместо 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; 
    } 

} 
+0

Какая у вас ошибка? – SLaks

+1

Я верю как для обоих фрагментов (неудивительно). Таким образом, ошибка находится где-то в другом месте. –

+1

Является ли это вашим реальным кодом или есть какой-то код, разделяющий между инициализацией 'year' и вызовом' isLeapYear() 'или, возможно, несколько потоков, работающих с полем' year'? – RealSkeptic

ответ

0

Ошибка при вызове моего конструктора.

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

Я случайно используя текущий год в конструкторе, а затем пытается использовать метод мутатор, чтобы изменить его на что-то другое. Поскольку мой метод проверки на високосный год вызывался только в конструкторе, а не в мутаторе, он никогда не обновлял мои логические значения!

Спасибо, что задали хорошие вопросы!

 Смежные вопросы

  • Нет связанных вопросов^_^