2013-05-27 14 views
6

Ecco il mio codice: l'obiettivo è inserire alcune informazioni di base (età, nome, genere) per il numero x di pazienti.Java - Salto di una riga durante la lettura di input dell'utente in un array (per loop)

public static void main(String[] args) { 

    int numPatients = 2; 

    int[] age = new int[numPatients]; 
    String[] gender = new String[numPatients]; 
    String[] name = new String[numPatients]; 
    Scanner in = new Scanner(System.in); 

    /* 
    * Obtaining patients details: name, gender, age 
    * First create a Scanner input variable to read the data 
    */ 
    for (int i = 0; i < numPatients; i++) 
    { 
    System.out.println("Enter name of patient " + (i+1)); 
    name[i] = in.nextLine(); 

    System.out.println("Enter gender (male/female) of patient " + (i+1)); 
    gender[i] = in.nextLine(); 

    System.out.println("Enter age of patient " + (i+1)); 
    age[i] = in.nextInt(); 
    } 

Il problema che sto avendo è quando il ciclo va al 2 ° variabile, vale a dire io non sono in grado di immettere un valore per il nome del paziente. Sembra ignorare l'input e andare direttamente al prossimo input, che è gender.

Enter name of patient 1 
Mark 
Enter gender (male/female) of patient 1 
Male 
Enter age of patient 1 
34 
Enter name of patient 2 //Skipped. Could not enter input here 
Enter gender (male/female) of patient 2 
Jenna 

Qualche idea del motivo? È meglio usare BufferedReader invece?

risposta

7

Se è necessario utilizzare Scanner, quindi sempre utilizzare nextLine(). Il problema è che nextInt() legge solo la parte intera dell'input e si arresta prima di leggere la pressione del tasto Invio. Quindi la prossima chiamata a nextLine() vede la pressione del tasto Invio nel buffer e le cose che hai inserito un nome vuoto.

Così si può fare qualcosa di simile:

age[i] = Integer.parseInt(in.nextLine()); 

ed essere pronti a gestire l'eccezione che accadrà se l'utente digita qualcosa di diverso da un numero.

+0

Davvero interessante e non l'avrei capito. Grazie per l'aiuto, Greg. Ora funziona! – JPwire

0

Se si è certi che il nome sarà una singola parola (non un problema per maschio o femmina), è possibile modificare l'input dello scanner per ottenere solo la stringa;

in.next(); 

funziona correttamente (solo se il nome è una singola parola).

Problemi correlati