Pergunta

O que eu quero fazer é pedir ao usuário um número de strings para ler uma matriz e, em seguida, pedir ao usuário que insira esse número de strings e as leia na matriz. Quando executo este código, ele nunca me pede uma entrada no primeiro ciclo do primeiro loop, basta imprime "String #0: String #1:" e depois posso inserir texto. Por que isso e o que eu fiz de errado?

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]);

}
}
Foi útil?

Solução

Carregando.

nextInt() Não consome a nova linha no buffer de entrada que foi colocado lá quando você inseriu o número de entradas. Na iteração 0 do loop for, já existe uma linha de entrada no buffer e nextLine() pode ser concluído imediatamente e o programa aguardará a nova linha de entrada apenas na iteração 1. Para ignorar a nova linha na entrada, você pode adicionar apenas mais outro nextLine() Ligue antes de entrar no loop for.

Outras dicas

Talvez você deva mudar seu loop para usar 'sc.next ()'

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

Pode ser explicado pela API Java

String a seguir (): encontra e retorna o próximo token completo deste scanner.

String nextline (): Avisa esse scanner além da linha atual e retorna a entrada que foi ignorada.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top