Остальное утверждение не печатается? - PullRequest
0 голосов
/ 09 октября 2019

Я написал простую программу, которая должна отображать, является ли введенный пользователем int високосным или нет, и если да, то какой это високосный год.

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

Примечание: это было написано в IDE BlueJ, поэтому io был импортирован автоматически, поэтому я не импортировал его

/**
 * Reads a user inputted integer value and determines if it is a leap year
 * Created by Oh boy I suck at this
 * 9 September 2019
 */

import java.util.Scanner;

public class LeapYear
{
    public static int getYear(String prompt)
    {
        String newLine = System.getProperty("line.separator");
        int value = 0;
        boolean flag = true;
        while (flag)
        {
            Scanner scan = new Scanner(System.in);
            System.out.println(prompt + ": ");
            try
            {
                value = scan.nextInt();
                flag = false;
            }
            catch(java.util.InputMismatchException e)
            {
                System.out.println("What you have inputed was not an int.");
                System.out.println(newLine);
            }
        }
        return value;
    }

    public static void main (String[] args)
    {
        int year = getYear("Input the year ");
        final int leapYear = year/4;
        if(year % 4 == 0){
            if(year % 100 >= 1){
                if(year % 400 >= 1){
                    System.out.println("The year inputted: " + year + " is equivilant to " + leapYear + " leap year(s).");
                }
                else{
                    System.out.println("The year inputted: " + year + " is not a leap year.");
                }
            }
        }
    }
}

1 Ответ

1 голос
/ 10 октября 2019

Давайте посмотрим на ваши утверждения if и запомним правила для високосных лет.

Понимание високосных лет

В общем, високосный год - это год, который делится на четыре, т.е. где утверждение year % 4 == 0 истинно.

Но: если год не високосный, то он делится на 100. Т.е. year % 100 == 0 верно.

Исключение: когда этотакже делится на 400, т. е. year % 400 == 0 верно - тогда у нас есть високосный год.

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

Дерево решений

  1. Это кандидат високосного года? year % 4 == 0 В противном случае: отобразить «не високосный год»
  2. Это исключение високосного года (каждые 100 лет)? year % 100 == 0 В противном случае: отобразить «не високосный год»
  3. Это исключение для високосного года (каждые 400 лет)? year % 400 == 0 True => Показать «високосный год», False => Показать «не високосный год»

Ваша реализация

Давайте сначала посмотрим на ваше утверждение if.

  1. Ваш первый оператор if проверяет, делится ли год на четыре. Это так, чтобы вы знали, имеете ли вы дело с кандидатом високосного года. Так что это правильно - но вы забыли разобраться со случаем, когда год НЕ является високосным годом (поэтому здесь вы пропускаете возможный выход "не високосного года")

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

  3. Третий if вложен в неправильный блок if. Он принадлежит к блоку else родительского блока.

Подсказки

Попытайтесь понять, как вход и выход связаны друг с другом, и попробуйте поразить каждыйif / else.

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

Если что-то становится странным, попробуйте «отследить» вашу программу с помощью «хлебных крошек»: System.out.println ( "1");System.out.println ( "2");... в каждой строке, где вы имеете дело с ветвлением или циклом (если, иначе, переключитесь, в то время как ...), это будет отслеживать каждый шаг программы в командной строке. Вы можете использовать это, пока ваша школа не поощрит вас использовать правильную IDE.

Не забывайте: практика совершенствует;)

Pseude code (спойлер)

Используйте толькоэто если вы полностью застряли.

Итог

Некоторая часть вашей логики неверна, и вы забыли реализовать else ответвлений.

HTH

...