#java #input #integer
#java #ввод #целое число
Вопрос:
Я застрял в этой части программы, где пользователь вводит несколько целых чисел, и выбирается только первое. В моем текущем коде вывод такой.
There are 10 sticks on the board.
Jerry: How many sticks do you take (1-3)? *1 3 4 2*
There are 9 sticks on the board.
Sherry: How many sticks do you take (1-3)? There are 6 sticks on the board.
Jerry: How many sticks do you take (1-3)? Please enter a number between 1 and 3.
Jerry: How many sticks do you take (1-3)? There are 4 sticks on the board.
Sherry: How many sticks do you take (1-3)?
В то время как в данном примере вывод таков.
Jerry: How many sticks do you take (1-3)? *1 3 4 2*
There are 8 sticks on the board.
Pat: How many sticks do you take (1-3)? *3*
There are 5 sticks on the board.
Кажется, что дополнительные целые числа поставлены в очередь и ожидают следующей команды ввода сканера. В данном примере лишние целые числа удаляются. Как это делается? Есть ли команда для очистки всего текущего пользовательского ввода или все целые числа, считываемые с помощью .hasNextInt и любые после первого, просто отбрасываются? Кроме того, где hasNextInt просматривается во входных данных? Будет ли следующая команда hasNextInt выглядеть в том же месте ввода, если новый ввод не был добавлен?
(Текст, заключенный в **, является пользовательским вводом.)
Комментарии:
1. Пожалуйста, включите свой код в вопрос.
2. Добавьте свой код. Я предполагаю, что вы используете
while(sc.hasNextInt()) {}
вместоif
.
Ответ №1:
Если вы не можете быть уверены, что пользователь правильно введет ввод, вы можете сделать это, приняв String
s вместо int
s . Вот так:
Scanner s = new Scanner(System.in);
System.out.print("How many?: ");
int many = Integer.parseInt(s.nextLine().trim().split(" ")[0]);
System.out.println(many);
Это даже будет обрабатывать входные данные, такие " 2 5 6 5"
как, а также примеры, которые у вас есть, беря всю входную строку, обрезая все начальные и конечные " "
s, разделяя строку на массив String
s вокруг " "
s и возвращая первый (тот, который вы хотите) по индексу 0
.
Чего он не делает, как написано, так это обрабатывает входные данные, такие как " foo bar 42"
или любые другие входные данные, где первый индекс разделенной строки не может быть проанализирован как целое число. Попытка сделать это приведет к NumberFormatException
.