С помощью сканера.строки() [дубликат]
этот вопрос уже есть ответ здесь:
у меня возникли проблемы при попытке использовать метод nextLine() из java.утиль.Сканер.
вот что я пробовал:
import java.util.Scanner;
class TestRevised {
public void menu() {
Scanner scanner = new Scanner(System.in);
System.out.print("Enter a sentence:t");
String sentence = scanner.nextLine();
System.out.print("Enter an index:t");
int index = scanner.nextInt();
System.out.println("nYour sentence:t" + sentence);
System.out.println("Your index:t" + index);
}
}
пример #1: этот пример работает по назначению. Линия String sentence = scanner.nextLine();
ожидает ввода, прежде чем продолжить System.out.print("Enter an index:t");
.
это производит выход:
Enter a sentence: Hello.
Enter an index: 0
Your sentence: Hello.
Your index: 0
// Example #2
import java.util.Scanner;
class Test {
public void menu() {
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("nMenu Optionsn");
System.out.println("(1) - do this");
System.out.println("(2) - quit");
System.out.print("Please enter your selection:t");
int selection = scanner.nextInt();
if (selection == 1) {
System.out.print("Enter a sentence:t");
String sentence = scanner.nextLine();
System.out.print("Enter an index:t");
int index = scanner.nextInt();
System.out.println("nYour sentence:t" + sentence);
System.out.println("Your index:t" + index);
}
else if (selection == 2) {
break;
}
}
}
}
Пример #2: этот пример не работает должным образом. В этом примере используется цикл while и структура if-else, чтобы позволить пользователю выбрать, что делать. Как только программа доберется до String sentence = scanner.nextLine();
, он не ждет ввода, а вместо этого выполняет строку System.out.print("Enter an index:t");
.
это производит выход:
Menu Options
(1) - do this
(2) - quit
Please enter your selection: 1
Enter a sentence: Enter an index:
что делает невозможным ввод предложения.
почему Пример №2 не работает должным образом? Единственная разница между бывшими. 1 и 2-это экс. 2 имеет цикл while и структуру if-else. Я не понимаю, почему это влияет на поведение сканера.nextInt().
5 ответов:
Я думаю, что ваша проблема в том, что
int selection = scanner.nextInt();
читает просто число, а не конец строки или что-нибудь после номера. Когда вы объявляете
String sentence = scanner.nextLine();
это читает остаток строки с номером на нем (ничего после числа я подозреваю)
попробуйте установить сканер.nextLine (); после каждого nextInt (), если вы собираетесь игнорировать остальную часть строки.
вместо того, чтобы поместить дополнительную
scanner.nextLine()
каждый раз, когда вы хотите что-то прочитать, поскольку кажется, что вы хотите принять каждый ввод в новой строке, вы можете вместо этого изменить разделитель, чтобы фактически соответствовать только новым строкам (вместо любых пробелов, как по умолчанию)import java.util.Scanner; class ScannerTest { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); scanner.useDelimiter("\n"); System.out.print("Enter an index: "); int index = scanner.nextInt(); System.out.print("Enter a sentence: "); String sentence = scanner.next(); System.out.println("\nYour sentence: " + sentence); System.out.println("Your index: " + index); } }
таким образом, чтобы прочитать строку ввода, вам нужно только
scanner.next()
это имеет тот же разделитель поведения next{Int, Double, ...}разница с" nextLine() каждый раз " подход, разве что последний примет, как индекс также
<space>3
,3<space>
и3<space>whatever
в то время как первый принимает только3
на линию
Не пытайтесь сканировать текст с помощью nextLine (); после использования nextInt () с тем же сканером! Это не очень хорошо работает с Java Scanner, и многие разработчики Java предпочитают просто использовать другой сканер для целых чисел. Вы можете вызвать эти сканеры scan1 и scan2, если хотите.
это потому, что когда вы вводите номер, то нажмите Enter,
input.nextInt()
потребляет только число, а не "конец строки". Примитивные типы данных, такие как int, double и т. д., не потребляют "конец строки", поэтому "конец строки" остается в буфере и когдаinput.next()
выполняется, он потребляет "конец строки" из буфера с первого входа. Вот почему, вашString sentence = scanner.next()
только потребляет "конец строки" и не ждет, чтобы читать с клавиатуры.Совет: использовать
scanner.nextLine()
вместоscanner.next()
, потому чтоscanner.next()
не считывает пробелы с клавиатуры. (Усечь строку после предоставления некоторого пространства с клавиатуры, только показать строку перед пробелом.)