Проблема с Java Scanner sc.nextLine();
-
20-09-2019 - |
Вопрос
извини за мой английский :)
Я новичок в программировании на Java, и у меня проблема со сканером.Мне нужно прочитать Int, показать некоторые данные, а затем прочитать строку, поэтому я использую sc.nextInt() sc.nextInt(); покажи мои вещи showMenu() Шоумену(); а затем попробуйте прочитать строку palabra=sc.nextLine();
Кто-то сказал мне, что мне нужно использовать sc.nextLine();после sc.nextInt();но я не понимаю, почему вы должны это делать : (
Вот мой код:
public static void main(String[] args) {
// TODO code application logic here
Scanner sc = new Scanner(System.in);
int respuesta = 1;
showMenu();
respuesta = sc.nextInt();
sc.nextLine(); //Why is this line necessary for second scan to work?
switch (respuesta){
case 1:
System.out.println("=== Palindromo ===");
String palabra = sc.nextLine();
if (esPalindromo(palabra) == true)
System.out.println("Es Palindromo");
else
System.out.println("No es Palindromo");
break;
}
}
Спасибо большое за ваше время и помощь: D
Решение
nextInt()
считывает только до тех пор, пока не найдет значение int, а затем останавливается.
Вы должны сделать nextLine()
потому что входной поток все еще содержит символ новой строки и, возможно, другие данные, отличные от int, в строке.Зовущий nextLine()
считывает все оставшиеся данные, включая ввод, который пользователь нажал между вводом int и вводом строки.
Другие советы
Когда вы вводите значение (будь то String
, int
, double
, и т.д.) и нажмите "Ввод", символ новой строки (он же '\n'
) будет добавлен в конец вашего ввода.Итак, если вы вводите int, sc.nextInt()
будет считывать только введенное целое число и оставлять '\n'
сзади, в буфере.Итак, способ исправить это - добавить sc.nextLine()
это позволит прочитать остатки и выбросить их.Вот почему вам нужно иметь эту единственную строку кода в вашей программе.