У меня есть этот код:
Scanner scan = new Scanner(System.in);
String s2 = scan.nextLine();
int i2 = scan.nextInt();
System.out.println("natural= " + i2);
System.out.println("cadena = " + s2);
scan.close();
Что работает правильно:
Это строка
1714
natural= 1714
string = Это строка
Но если я изменю порядок строк Scanner
:
int i2 = scan.nextInt();
String s2 = scan.nextLine();
Он игнорирует строку scan.nextLine()
и дает мне результат сразу после того, как я ввожу файл int
.
1714
натуральный = 1714
цепной =
Кто-нибудь знает, что происходит и как это исправить?
Поведение
nextInt()
не то, что вы ожидаете. Когда вы вводите a1714
, вы фактически вводите a1714
и разрыв строки (\n
), аnextInt()
разрыв строки (\n
) не используется.Это означает, что
nextLine()
читается этот разрыв строки (пустой -->\n
).Чтобы исправить это, когда вы
nextInt()
всегда ставите anextLine()
, у которого не будет содержимого.Из вашего кода:
Еще один способ исправить это — всегда читать
nextLine()
и делатьcast
пост:В этом ответе из оригинального SO они дают более подробную информацию, если вам интересно.