2015-10-26 2 views
0

Вот мой код для тестирования, если дата действительна в феврале. Верхняя часть для тестирования, если leapYear истинна или ложна, работает правильно. Если я введу, например, 02/29/1963 в качестве даты, leapYear будет = false. Однако по какой-то причине код будет продолжаться, как если бы leapYear = true. Конечным результатом будет:Логическая ошибка Java-високосного года

else if (leapYear = true){ 
    if ((day > 0) && (day < 30) && (month ==2)){ 
     System.out.println("Your date is valid.)"` 

он будет выводить «Ваша дата действительна». тогда как он должен выдаваться специально для даты 02/29/1963 «Ваша дата недействительна, потому что в феврале 1963 года только 28 дней»);

Я не могу понять, почему он это делает. Спасибо за ваше время. ПОСТАНОВИЛИ

if ((year % 400 == 0) || ((year % 4 == 0) && (year % 100 != 0))) { 
    leapYear = true; 
} else { 
    leapYear = false; 
} 

if (leapYear = false) { 
    if ((day > 0) && (day < 29) && (month == 2)) { 
     System.out.println("Your date is valid."); 
    } else if (day > 29) { 
     System.out.println("Your date is invalid because there are only 28 days in February" 
         + "for the year " + year + "."); 
    } else { 
     System.out.println("Your date is invalid because the day you entered does not exist."); 
    } 
} else if (leapYear = true) { 
    if ((day > 0) && (day < 30) && (month == 2)) { 
     System.out.println("Your date is valid."); 
    } else if (day > 30) { 
     System.out.println("Your date is invalid because there are only 29 days in February for" 
         + "the year " + year + "."); 
    } else { 
     System.out.println("Your date is invalid because the day you entered does not exist."); 
    } 
} 
+0

попробовать, если (leapYear == ложь) и вместо (leapYear = ложь) – PK20

+0

Как стилистическая вещь, вы почти никогда не сравнить логическое значение для литерала ' true' или 'false'. Вместо 'if (a == true)' или 'if (b == false)', просто выполните 'if (a)' или 'if (! B)'. «If» - это _already_, сравнивающее логическое значение с истинным или ложным; вам не нужно повторно указывать это сравнение. Или, говоря иначе: вы обычно не пишете 'if ((i == 3) == true)' для сравнения i-3, правильно? – yshavit

+0

спасибо всем за вашу помощь, была глупая ошибка, которую я упустил – synthofthewastes

ответ

2

Ваш if и else-if условие не должно быть assignment операция довольно comparison.

Вместо if (leapYear = false){ попробовать

if (leapYear == false){ 

или просто

if (!leapYear){ 

То же самое для else if (leapYear = true){. Это будет

else if (leapYear == true){ 

или

else if (leapYear){ 
+1

спасибо, что она работает сейчас – synthofthewastes

+0

Добро пожаловать. Вы должны использовать IDE, например NetBeans, eclipse. Его работа IDE для выяснения таких глупых ошибок. –

1

Вы косяк оператор присваивания использование в if заявлении. Вы должны выполнить проверку равенства:

if (leapYear == false) { 
     if ((day > 0) && (day < 29) && (month == 2)) { 
      System.out.println("Your date is valid."); 
     } else if (day > 29) { 
      System.out.println("Your date is invalid because there are only 28 days in February" 
          + "for the year " + year + "."); 
     } else { 
      System.out.println("Your date is invalid because the day you entered does not exist."); 
     } 
    } else if (leapYear == true) { 
     if ((day > 0) && (day < 30) && (month == 2)) { 
      System.out.println("Your date is valid."); 
     } else if (day > 30) { 
      System.out.println("Your date is invalid because there are only 29 days in February for" 
          + "the year " + year + "."); 
     } else { 
      System.out.println("Your date is invalid because the day you entered does not exist."); 
     } 
    } 
+0

Большое вам спасибо – synthofthewastes

0

попробовать это:

if (leapYear == false) { 
    if ((day > 0) && (day < 29) && (month == 2)) { 
     System.out.println("Your date is valid."); 
    } else if (day >= 29) { 
     System.out.println("Your date is invalid because there are only 28 days in February" 
         + "for the year " + year + "."); 
    } else { 
     System.out.println("Your date is invalid because the day you entered does not exist."); 
    } 
} else if (leapYear == true) { 
    if ((day > 0) && (day < 30) && (month == 2)) { 
     System.out.println("Your date is valid."); 
    } else if (day > 30) { 
     System.out.println("Your date is invalid because there are only 29 days in February for" 
         + "the year " + year + "."); 
    } else { 
     System.out.println("Your date is invalid because the day you entered does not exist."); 
    } 
} 
1

Я понимаю, что вы не можете использовать это для вашей домашней работы, но FYI для других, Java включает в себя эту функцию в ее рамках java.time ,

ZonedDateTime now = ZonedDateTime.now (ZoneId.of ("America/Montreal")); 
Year year = Year.from (now); 
Boolean isLeap = year.isLeap(); 

Дамп для консоли.

System.out.println ("year: " + year + " isLeap: " + isLeap); 

При запуске.

Год выпуска: 2015 isLeap: ложные

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