Solución:
Eso es porque el Scanner.nextInt
El método no lee el nueva línea carácter en su entrada creado al presionar “Enter”, por lo que la llamada a Scanner.nextLine
regresa después de leer eso nueva línea.
Encontrará un comportamiento similar cuando use Scanner.nextLine
después Scanner.next()
o cualquier Scanner.nextFoo
método (excepto nextLine
sí mismo).
Solución alterna:
-
O ponga un
Scanner.nextLine
llamar después de cadaScanner.nextInt
oScanner.nextFoo
consumir el resto de esa línea, incluido nueva líneaint option = input.nextInt(); input.nextLine(); // Consume newline left-over String str1 = input.nextLine();
-
O, mejor aún, lea la entrada
Scanner.nextLine
y convierta su entrada al formato adecuado que necesite. Por ejemplo, puede convertir a un número entero usandoInteger.parseInt(String)
método.int option = 0; try { option = Integer.parseInt(input.nextLine()); } catch (NumberFormatException e) { e.printStackTrace(); } String str1 = input.nextLine();
El problema es con input.nextInt () método: solo lee el valor int. Entonces, cuando continúe leyendo con input.nextLine (), recibirá la tecla ” n” Enter. Entonces, para omitir esto, debe agregar el input.nextLine (). Espero que esto quede claro ahora.
Pruébelo así:
System.out.print("Insert a number: ");
int number = input.nextInt();
input.nextLine(); // This line you have to add (It consumes the n character)
System.out.print("Text1: ");
String text1 = input.nextLine();
System.out.print("Text2: ");
String text2 = input.nextLine();
Es porque cuando ingresa un número y luego presiona Ingresar, input.nextInt()
consume sólo el número, no el “final de línea”. Cuando input.nextLine()
se ejecuta, consume el “final de línea” que aún se encuentra en el búfer desde la primera entrada.
En su lugar, use input.nextLine()
inmediatamente despues input.nextInt()