Domanda

Quello che voglio fare è chiedere all'utente un numero di stringhe da leggere in un array, quindi chiedere all'utente di inserire quel numero di stringhe e di leggerle nell'array. Quando eseguo questo codice, non mi viene mai richiesto un input per il primo ciclo del primo for-loop, stampa solo " String # 0: String # 1: " e quindi posso inserire il testo. Perché è quello e cosa ho fatto di sbagliato?

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

}
}
È stato utile?

Soluzione

Il buffering.

nextInt () non utilizza la nuova riga nel buffer di input che è stata inserita quando è stato inserito il numero di input. Nell'iterazione 0 del ciclo for, esiste già una riga di input nel buffer e nextLine () può essere completato immediatamente e il programma attenderà la nuova riga di input solo nell'iterazione 1. Per ignorare la nuova riga nell'input, puoi aggiungere solo un'altra chiamata nextLine () prima di entrare nel ciclo for.

Altri suggerimenti

Forse dovresti cambiare il tuo ciclo per usare 'sc.next ()'

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

Può essere spiegato dall'API Java

String next (): trova e restituisce il prossimo token completo da questo scanner.

String nextLine (): fa avanzare lo scanner oltre la riga corrente e restituisce l'input che è stato ignorato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top