Размещение объявления переменной относительно циклов while - PullRequest
0 голосов
/ 04 октября 2019

Эта программа запрашивает у пользователя целое число. Если пользователь не вводит целое число, он запрашивает снова, пока они не введут. Как только целое число введено, оно печатает «CS115» пять раз.

public static void main(String[] args) {
    String CS115 = "Hello CS115";
    Scanner scan = new Scanner ( System.in );

    System.out.print("Enter an integer: ");

    int correctInput = scan.nextInt();

    while(!scan.hasNextInt()) {
            System.out.println("Try again > "); 
            scan.next();
    }


    for (int i = 1; i <= correctInput; i++)  {
            System.out.println(CS115);
        }

}

По какой-то причине я поместил объявление correctInput после цикла while и перед циклом for, и это сработало (см. Ниже). Но я не понимаю, почему то, что у меня есть выше, не сработает. Если я введу 3 например, ничего не происходит. Если я снова введу 3, я получу желаемый результат.

Я подозреваю, что когда я ввожу 3, correctInput назначается 3, а цикл while игнорируется. Я понимаю эту часть, я верю. Но почему цикл for не будет выполняться с этим значением correctInput? Программа просто завершается, пока я не введу значение во второй раз. После второй записи запускается цикл for. Что здесь происходит?

public static void main(String[] args) {
        String CS115 = "Hello CS115"
        Scanner scan = new Scanner ( System.in );

        System.out.print("Enter an integer: ");

        while(!scan.hasNextInt()) {
                System.out.println("Try again > "); 
                scan.next();
        }

        int correctInput = scan.nextInt();

        for (int i = 1; i <= correctInput; i++)  {
                System.out.println(CS115);
        }           
}

1 Ответ

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

Вы должны сначала вызвать hasNextInt, чтобы проверить, набрал ли пользователь целое число, , а затем , позвонить nextInt, чтобы прочитать это целое число. Если вы позвоните nextInt до hasNextInt, nextInt прочитает целое число, но тогда hasNextInt будет ожидать, что вы наберете другое целое число. Это потому, что в Scanner, hasNext используется для проверки ввода до того, как вы прочитаете его с next.

...