Я пытаюсь поместить пользовательский ввод в массив, но метод 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);
}
Как вы запускаете код? Если вы получаете ввод от пользователя, то следующий int будет всегда.
q, x, #, ., Foo, Stop now!!!, !@#$%^&*, ...
что я пытаюсь сделать, так это ввести любое количество int. Должен ли я указывать, сколько int я хочу ввести, или есть способ написать цикл, чтобы он перестал принимать ввод, когда пользователь перестанет вводить int.
Что означает, что пользователь перестал вводить ints?




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