Perché questo for-loop non mi consente di inserire il testo nel primo ciclo?
-
06-07-2019 - |
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]);
}
}
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.