2015-02-03 1 views
0

Я написал программу для расчета високосного года. Вторая часть - это то, где я должен печатать количество лет до следующего високосного года, если год не является високосным годом. На 2097 год выход показывает 3 года до следующего прыжка, но его предположительно 7 лет. Я думаю, что ошибся с кодом в последней строке. Пожалуйста, помогите мне. Это мой код.Java-программа: Калькулятор летного цикла

public static void main(String[] args) { 
    // TODO code application logic here 
    int year = 2093; 


    if((year%4==0) && year%100!=0){   
      System.out.println(year + " is a leap year."); 
     } 
    else if ((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"); 
     System.out.println(4-(year%4) + " years untill next leap year"); 
    } 
+0

Если вы можете объяснить * почему * следующий високосный год после того, как 2097 в 7 лет , вы будете хорошим способом выяснить, как его кодировать. –

+0

Високосные годы происходят каждые 4 года, поэтому невозможно, чтобы следующий был более 3 лет? – jnd

+0

'4 - (2097% 4)' is '3' для меня. –

ответ

1

Правильность определения вашего видового года. Тем не менее, вы расчета на следующий високосный год на основе неправильно «каждые 4 года в високосный год» правило с этим выражением:

4-(year%4) 

Вы можете найти следующий високосный год следующим:

  1. Начать со следующего года после year. Используйте ту же логику, которую вы уже написали, чтобы определить, является ли это високосным годом.
  2. Если это не так, продолжайте увеличивать значение «следующего года» до тех пор, пока не найдете високосный год.

Вы найдете полезным разместить логику if в отдельном методе, чтобы избежать повторения кода и логики.

+0

Не могли бы вы написать код и дать мне? – dron

1

Главный код:

int year = 2093; 
if (isLeapYear(year) { 
    System.out.println(year + " is a leap year"); 
} else { 
    int moreYears = nextLeapYear(year) - year; 
    System.out.println(moreYears + " more years until next leap year"); 
} 

Check if a year is a leap year:

public boolean isLeapYear(int year) 
{ 
    if (year % 4 != 0) 
     return false; 
    else if (year % 100 != 0) 
     return true; 
    else if (year % 400 != 0) 
     return false; 
    else 
     return true; 
} 

Получить следующий високосный год:

public int nextLeapYear(int year) 
{ 
    while(!isLearpYear(year)) 
     year++; 

    return year; 
} 
+0

вариант «case» выглядит уродливым и менее эффективен, чем оригинальный метод isLeapYear(). Я бы предложил вернуться к этому редактированию. – eckes

+0

@eckes обновлен. благодаря! –

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

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