У меня проблемы с пониманием того, как .next (), .nextInt () и .hasNextInt () все работают по отношению друг к другу в Java? - PullRequest
0 голосов
/ 02 июня 2019

Я посмотрел документацию по методам, но до сих пор не могу понять, как они работают.Вот мои вопросы: .hasNextInt () проверяет следующее целочисленное значение и ничего не потребляет, но в моем коде ниже, когда он появляется впервые, он позволяет пользователю ввести значение;это почему?После этого мне нужно использовать .next (), чтобы очистить текущее значение объекта сканера, который я использую, и мне не будет предложено новое значение, если я удалю его из цикла while.

Что касается .nextInt(), только на первой итерации в коде проверяется последнее целочисленное значение в объекте сканера, но при повторном вводе это позволяет мне ввести новое значение.Все это кажется очень противоречивым, и мне трудно понять, что происходит под капотом.

    int integer=0;
    Scanner scan = new Scanner(System.in);
    System.out.println("Please enter an integer");

    while(!scan.hasNextInt())
    {
        System.out.println("Wrong");
        scan.next();
    }

    integer = scan.nextInt();
    System.out.println(integer);

    int newNumber = scan.nextInt();
    System.out.println(newNumber);

Ответы [ 2 ]

0 голосов
/ 02 июня 2019

Вы можете считать Scanner Iterator.Iterator имеет два метода hasNext(), который возвращает, если есть некоторые данные, но не вносит изменений, и next(), который возвращает объект.

То же самое с Scanner.все next*() возвращают что-то из буфера, но методы has*() проверяют только возможность извлечь конкретный объект из буфера.

0 голосов
/ 02 июня 2019

функция nextInt не использует символы новой строки

, поэтому вам нужно запустить Scanner.nextLine, чтобы использовать оставшуюся часть строки,

Это уже объяснено более подробно здесь

Сканер пропускает nextLine () после использования next () или nextFoo ()?

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