2013-05-27 9 views
6

これは私のコードです - 目的はx個の患者の基本情報(年齢、名前、性別)を入力することです。Java - 配列へのユーザー入力を読み込むときに行をスキップする(ループのため)

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

ループが第二変数になると私がいる問題は、つまり、私は患者の名前の値を入力することはできませんよ、です。入力をスキップして次の入力に直接移動します。これは性別です。

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 

これはどうして起こりますか?代わりにBufferedReaderを使用する方が良いでしょうか?

答えて

7

Scannerを使用する必要がある場合は、は常にです。nextLine()を使用してください。問題は、nextInt()だけを読み取って、入力の整数部であるを入力し、Enterキーを読み取る前に停止することです。次に、nextLine()を呼び出すと、バッファにEnterキーを押し、空の名前を入力したものが表示されます。

だからあなたのような何かを行うことができます。

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

をし、数以外のユーザタイプであれば、何かが起こるのだろう例外を処理するために準備すること。

+0

本当に興味深いと私はそれをキャッチしませんでした。助けてくれてありがとう、グレッグ。それは今働きます! – JPwire

0

名前が単一の単語(男性または女性の問題ではありません)であることが保証されている場合は、文字列を取得するためにスキャナの入力を変更できます。

in.next(); 

これは正常に機能します(名前が1つの単語の場合のみ)。

関連する問題