Cadenas de lectura de clase Java Scanner

Obtuve el siguiente código:

int nnames; String names[]; System.out.print("How many names are you going to save: "); Scanner in = new Scanner(System.in); nnames = in.nextInt(); names = new String[nnames]; for (int i = 0; i < names.length; i++){ System.out.print("Type a name: "); names[i] = in.nextLine(); } 

Y la salida para ese código es la siguiente:

 How many names are you going to save:3 Type a name: Type a name: John Doe Type a name: John Lennon 

¿Observe cómo se saltó la entrada del primer nombre? Se saltó y fue directo a la segunda entrada del nombre. He intentado buscar qué causa esto, pero no parezco poder clavarlo. Espero que alguien pueda ayudarme. Gracias

El motivo del error es que nextInt solo extrae el entero, no la nueva línea. Si agrega un in.nextLine () antes de su bucle for, se comerá la nueva línea vacía y le permitirá ingresar 3 nombres.

 int nnames; String names[]; System.out.print("How many names are you going to save: "); Scanner in = new Scanner(System.in); nnames = in.nextInt(); names = new String[nnames]; in.nextLine(); for (int i = 0; i < names.length; i++){ System.out.print("Type a name: "); names[i] = in.nextLine(); } 

o simplemente lea la línea y analice el valor como un Entero.

 int nnames; String names[]; System.out.print("How many names are you going to save: "); Scanner in = new Scanner(System.in); nnames = Integer.parseInt(in.nextLine().trim()); names = new String[nnames]; for (int i = 0; i < names.length; i++){ System.out.print("Type a name: "); names[i] = in.nextLine(); } 

use sc.nextLine (); dos veces para que podamos leer la última línea de cuerda

sc.nextLine () sc.nextLine ()

Es porque in.nextInt () no cambia la línea. Entonces, primero “ingresa” (después de presionar 3) hace que endOfLine lea su in.nextLine () en su bucle.

Aquí hay un pequeño cambio que puedes hacer:

 int nnames; String names[]; System.out.print("How many names are you going to save: "); Scanner in = new Scanner(System.in); nnames = Integer.parseInt(in.nextLine()); names = new String[nnames]; for (int i = 0; i < names.length; i++){ System.out.print("Type a name: "); names[i] = in.nextLine(); } 

Esto se debe a que in.nextInt () solo recibe un número int, no recibe una nueva línea. Entonces ingresa 3 y presiona “Enter”, el final de la línea se lee en in.nextline ().

Aquí está mi código:

 int nnames; String names[]; System.out.print("How many names are you going to save: "); Scanner in = new Scanner(System.in); nnames = in.nextInt(); in.nextLine(); names = new String[nnames]; for (int i = 0; i < names.length; i++){ System.out.print("Type a name: "); names[i] = in.nextLine(); } 

Podrías simplemente haber reemplazado

names[i] = in.nextLine(); con names[i] = in.next();

Usar next () solo devolverá lo que viene antes de un espacio. nextLine () mueve automáticamente el escáner hacia abajo después de devolver la línea actual.