Проблема со сканером Java sc.nextLine();

извините за мой английский :)
Я новичок в программировании на Java, и у меня проблема со сканером. Мне нужно прочитать Int, показать кое-что, а затем прочитать строку, поэтому я использую 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


person Jonathan B    schedule 14.03.2010    source источник


Ответы (2)


nextInt() считывает только до тех пор, пока не найдет int, а затем останавливается.

Вы должны сделать nextLine(), потому что входной поток все еще имеет символ новой строки и, возможно, другие данные, отличные от int, в строке. Вызов nextLine() считывает все оставшиеся данные, включая ввод, нажатый пользователем между вводом int и вводом String.

person Ben S    schedule 15.03.2010
comment
В первый раз, когда я столкнулся с этой проблемой, это тоже поставило меня в тупик, но как только вы узнаете, почему это имеет смысл! - person Ben S; 15.03.2010
comment
приятно знать, что я не один такой :D - person Jonathan B; 15.03.2010

Когда вы вводите значение (будь то String, int, double и т. д.) и нажимаете «ввод», в конце вашего ввода будет добавлен символ новой строки (также известный как '\n'). Таким образом, если вы вводите целое число, sc.nextInt() будет читать только введенное целое число и оставит '\n' в буфере. Таким образом, способ исправить это — добавить sc.nextLine(), который будет считывать остатки и выбрасывать их. Вот почему вам нужно иметь одну строку кода в вашей программе.

person Fadi Hanna AL-Kass    schedule 27.07.2013