cuerdas de lectura del escáner clase Java
-
13-09-2019 - |
Pregunta
Tengo 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 que el código es el siguiente:
How many names are you going to save:3
Type a name: Type a name: John Doe
Type a name: John Lennon
Tenga en cuenta la forma en que se saltó la primera entrada de nombre ?? Se saltó y fue directo a la segunda entrada de nombre. He intentado buscar lo que causa esto, pero no parecen ser capaces de clavarlo. Espero que alguien pueda ayudarme. Gracias
Solución
El motivo del error es que el nextInt sólo lo hace el número entero, no el salto de línea. Si se agrega una in.nextLine () antes de su bucle, se va a comer la nueva línea vacía y le permitirá introducir 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 leer la línea y analizar 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();
}
Otros consejos
utilizar sc.nextLine (); dos veces para que podamos leer la última línea de la cadena
sc.nextLine () sc.nextLine ()
Es porque el in.nextInt () no cambia la línea. Por lo que primero "Enter" (después de pulsar 3) causó el ENDOFLINE leído por su in.nextLine () en su bucle.
A continuación, un pequeño cambio que puede 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();
}
Esta porque in.nextInt () sólo reciben un número int, no recibe una nueva línea. Por lo que la entrada 3 y presionar "Enter", el final de la línea es leído por 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();
}
Se podría haber simplemente reemplazado
names[i] = in.nextLine();
con names[i] = in.next();
Uso siguiente () sólo devolverá lo que viene antes de un espacio. nextLine () se mueve automáticamente el escáner hacia abajo después de volver a la línea actual.