Java escáner cadenas de lectura de clase [duplicado]
-
13-09-2019 - |
Pregunta
Esta pregunta ya tiene una respuesta aquí:
- cuerdas de lectura de clase Java escáner 5 respuestas
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.next();
}
System.out.println(names[0]);
Al ejecutar este código, el escáner sólo va a recoger el primer nombre y no el apellido. Y que a veces se salta una línea cuando se trata de introducir un nombre, se mostrará como si hubiera dejado el nombre en blanco y pase al siguiente nombre. No sé lo que está causando esto.
Espero que alguien me puede ayudar!
EDIT: He tratado in.nextLine (); que fija los nombres completos, pero todavía mantiene una línea, aquí es un ejemplo de la salida:
How many names are you going to save: 3
Type a name: Type a name: John Doe
Type a name: John Lennon
Solución
En lugar de:
in.next();
Uso:
in.nextLine();
nextLine()
lee los caracteres hasta que encuentra un carácter de nueva línea '\n'
Otros consejos
escáner .Next detiene la lectura cuando se encuentra con un delimitador, que es un espacio en blanco. Utilice el método nextLine
lugar.
Después de su nextInt inicial (), todavía hay una nueva línea vacía en su entrada. Por lo que sólo añadir un nextLine () después de su nextInt (), y luego entrar en el bucle:
...
Scanner in = new Scanner(System.in);
nnames = in.nextInt();
in.nextLine(); // gets rid of the newline after number-of-names
names = new String[nnames];
for (int i = 0; i < names.length; i++){
System.out.print("Type a name: ");
names[i] = in.nextLine();
}
...
Trate de usar:
System.out.println()
En lugar de:
System.out.print()