Domanda

ho ricevuto il seguente 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();
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

Si noti come è saltata la prima voce nome ?? E 'saltato e sono andato dritto per la seconda voce nome. Ho provato a cercare che cosa provoca questo, ma non sembrano essere in grado di inchiodare esso. Spero che qualcuno mi può aiutare. Grazie

È stato utile?

Soluzione

Il motivo dell'errore è che il nextInt tira solo il numero intero, non il fine riga. Se si aggiunge un in.nextLine () prima del tuo ciclo for, si mangia la nuova linea vuota e permetterà di entrare 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();
}

o semplicemente leggere la linea 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();
}

Altri suggerimenti

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

sc.nextLine () sc.nextLine ()

E 'perché l'in.nextInt () non cambia linea. Così per la prima volta "Enter" (dopo aver premuto 3) Causa L'endofline letto dal vostro in.nextLine () nel ciclo.

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

Questo perché in.nextInt () solo ricevere un numero int, non riceve una nuova linea. Così si Ingresso 3 e premere "Invio", alla fine della linea viene letto da in.nextline ().

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

Si potrebbe avere semplicemente sostituito

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

Uso next () servirà solo a restituire ciò che viene prima di uno spazio. nextLine () si sposta automaticamente lo scanner verso il basso dopo il ritorno alla linea di corrente.

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