2009-09-23 10 views
24

ho ottenuto il seguente codice:Java Scanner stringhe classe la lettura

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(); 
} 

E l'uscita per quel codice è il seguente:

How many names are you going to save:3 
Type a name: Type a name: John Doe 
Type a name: John Lennon 

Notate come è saltata la prima voce nome ?? Lo saltò e andò dritto per il secondo nome. Ho provato a cercare ciò che causa questo, ma non sembra in grado di inchiodarlo. Spero che qualcuno possa aiutarmi. Grazie

+2

esatta (in realtà, esatto) partita http://stackoverflow.com/questions/1466008/ java-scanner-class-lettura-strings / – CPerkins

risposta

26

Il motivo dell'errore è che nextInt estrae solo il numero intero, non il nuovo numero. Se aggiungi un file in.nextLine() prima del ciclo for, mangerà la nuova riga vuota e ti consentirà di inserire 3 nomi.

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(); 
} 

oppure leggere la riga e analizzare il valore come numero intero.

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(); 
} 
2

È perché in.nextInt() non cambia linea. Quindi per prima cosa "inserisci" (dopo aver premuto 3) causa la lettura di endOfLine dal tuo in.nextLine() nel tuo loop.

Ecco un piccolo cambiamento che si può fare:

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(); 
    } 
2

Questo perché in.nextInt() ricevere solo un numero int, non riceve una nuova linea. Quindi inserisci 3 e premi "Invio", la fine della riga viene letta da in.nextline().

Ecco il mio codice:

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(); 
} 
0

Si potrebbe avere semplicemente sostituito

names[i] = in.nextLine(); con names[i] = in.next();

Utilizzando successivo() servirà solo a restituire ciò che viene prima di uno spazio. nextLine() sposta automaticamente lo scanner verso il basso dopo aver restituito la riga corrente.

3

utilizzare sc.nextLine(); due volte in modo da poter leggere l'ultima riga della stringa

sc.nextLine() sc.nextLine()

Problemi correlati