2009-09-23 22 views
24

me dieron el siguiente código:cadenas de lectura del escáner clase Java

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 

Aviso cómo se saltó la primera entrada de 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

+2

exacta (en realidad, exacta) partido de (http://stackoverflow.com/questions/1466008/ java-scanner-class-reading-strings / – CPerkins

Respuesta

26

El motivo del error es que el nextInt solo extrae el entero, no la nueva línea. Si agrega un in.nextLine() antes de su ciclo for, 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(); 
} 
2

Se debe a que in.nextInt() no cambia la línea. Entonces, primero "ingresa" (después de presionar 3) provoca que endOfLine sea leído por tu in.nextLine() en tu ciclo.

Aquí 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(); 
    } 
2

Esto porque in.nextInt() sólo recibirá un número int, no recibe una nueva línea. Entonces ingresa 3 y presiona "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(); 
} 
0

Usted podría tener simplemente reemplazó

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

Usando siguiente() sólo 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.

3

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

sc.nextLine) sc.nextLine()

Cuestiones relacionadas