Pregunta

Lo que quiero hacer es pedirle al usuario una serie de cadenas para leer en una matriz, y luego pedirle al usuario que ingrese esa cantidad de cadenas y las lea en la matriz. Cuando ejecuto este código, nunca me pide una entrada para el primer ciclo del primer ciclo for, simplemente imprime " String # 0: String # 1: " y luego puedo ingresar texto. ¿Por qué es eso y qué hice mal?

import java.util.Scanner;

public class ovn9 
{
public static void main(String[] args)
{
    Scanner sc=new Scanner(System.in);

    System.out.print("Number of inputs: ");

    int lines= sc.nextInt();
    String[] text=new String[lines];

    for(int x=0; x<text.length; x++)
    {
        System.out.print("String #"+x+": ");
        text[x] = sc.nextLine();
    }

    for(int y=0; y<text.length; y++)
        System.out.println(text[y]);

}
}
¿Fue útil?

Solución

Almacenamiento en búfer.

nextInt () no consume la nueva línea en el búfer de entrada que se colocó allí cuando ingresó el número de entradas. En la iteración 0 del ciclo for, ya hay una línea de entrada en el búfer y nextLine () puede completarse de inmediato y el programa esperará una nueva línea de entrada solo en la iteración 1. Para ignorar la nueva línea en la entrada, puede agregar solo otra llamada nextLine () antes de ingresar al bucle for.

Otros consejos

Tal vez debería cambiar su ciclo para usar 'sc.next ()'

for ( int x = 0; x < lines; x++ ) {
    System.out.print("String #" + x + ": ");
    text[x] = sc.next();
}

Puede explicarse por la API de Java

String next (): busca y devuelve el siguiente token completo de este escáner.

String nextLine (): avanza este escáner más allá de la línea actual y devuelve la entrada que se omitió.

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