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

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top