HasNextInt не вернет false и не выйдет из цикла

Я пытаюсь поместить пользовательский ввод в массив, но метод hasNextInt () не вернет false и не остановит ввод.

public static void main (String[] args) {

  Scanner in = new Scanner(System.in);

  int target = in.nextInt();
  while(in.hasNextInt()) {
     weights.insert(in.nextInt());
  }
  recKnapSack(target, 0);
}   

Вы закрываете стандартный ввод (например, с помощью ctrl-d)? Если нет, то как он узнает, что в какой-то момент в будущем int не будет?

Andy Turner 05.10.2018 00:05

Как вы запускаете код? Если вы получаете ввод от пользователя, то следующий int будет всегда.

Silvio Mayolo 05.10.2018 00:06
Когда Вы ожидаете, что он вернет false? При каких условиях? Я имею в виду, что очень легко вернуть false. Просто введите что-нибудь, которое не является целым числом. Примеры: q, x, #, ., Foo, Stop now!!!, !@#$%^&*, ...
Andreas 05.10.2018 00:07

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

Patrick 05.10.2018 00:29

Что означает, что пользователь перестал вводить ints?

khelwood 05.10.2018 00:34
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
5
218
1

Ответы 1

Scanner.hasNextInt() вернет false, когда обнаружит в своем буфере нецелочисленный символ. Однако он может удалять пробелы при чтении подсказок. Так что Space+Enter или Enter, скорее всего, не остановят цикл. Но любой другой персонаж будет.

Поскольку вы хотите ввести любое количество целых чисел, вы должны проинструктировать пользователя о том, что вводить, когда они будут готовы. Фактически, если вы пишете консольное приложение, рекомендуется всегда объяснять, ПОЧЕМУ программа ожидает ввода.

Любое нецелое число остановит условие цикла. В этом случае синтаксис будет работать как есть, пользователю просто нужна инструкция:

System.out.println("Please enter the target");
int target = in.nextInt();
System.out.println("Enter weights. Type 'X' to stop");
while(in.hasNextInt()) {

Другие вопросы по теме