Для цикла, чтобы получить пользовательский ввод позволяет ввести два значения для первого вопроса, но рассчитывает только одно значение - PullRequest
0 голосов
/ 23 октября 2018

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

Ниже приведено то, что у меня есть в данный момент, и мне нужночтобы понять, что происходит, когда он запрашивает у пользователя номер в первый раз:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int sum = 0;
        int counter = 0;
        for (int i = 0; i < 10; i++) {
            counter++;
            System.out.println("Enter number #" + counter + " :");
            int numberInput = scanner.nextInt();
            boolean hasNextInt = scanner.hasNextInt();
            if (hasNextInt) {
                sum += numberInput;
            } else {
                System.out.println("Invalid Number");
            }
        }
        scanner.nextLine(); // handle the next line character (enter key)
        System.out.println("The sum is " + sum);
        scanner.close();
    }
}

Ответы [ 2 ]

0 голосов
/ 23 октября 2018
Scanner scanner = new Scanner(System.in);
    int sum = 0;
    int counter = 0;
    for (int i = 0; i < 10; i++) {
        counter++;
        System.out.println("Enter number #" + counter + " :");
        int numberInput = scanner.nextInt();
       // boolean hasNextInt = scanner.hasNextInt();
        //if (hasNextInt) {
            sum += numberInput;
      //  } else {
        //    System.out.println("Invalid Number");
        //}
    }
    scanner.nextLine(); // handle the next line character (enter key)
    System.out.println("The sum is " + sum);
    scanner.close();

Не вызывайте hasnextInt (), который здесь бесполезен.

Потребовалось 11 входов, а не 10.

Если вы удалите это условие, потребуется 10 входови работает нормально.

Ваше состояние не влияет на него.

0 голосов
/ 23 октября 2018

В каждом цикле вы звоните scanner.nextInt() и scanner.hasNextInt().Но вы не используете результат hasNextInt() осмысленно (вы могли заметить, что ваш вывод «Неверное число» не тот, что происходит, если вы вводите что-то, что не является числом).

Первый вызовдо nextInt() блоков, пока вы не введете число.Затем hasNextInt() снова заблокируется, потому что номер уже прочитан, и вы спрашиваете, будет ли новый.Следующий номер читается из System.in, но вы фактически не используете его в этой итерации (вы просто спросили, есть ли он).Тогда в следующих итерациях nextInt() не будет блокироваться, потому что сканер уже извлек число из System.in и может немедленно его вернуть, поэтому все последующие запросы, которые вы видите, фактически ждут ввода на hasNextInt().

Всего 11 входных событий: Первые nextInt() плюс все 10 hasNextInt() с

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...