6

これが私のコードです - 目的は、患者数 x の基本情報 (年齢、名前、性別) を入力することです。

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

私が抱えている問題は、ループが 2 番目の変数に移動するときです。つまり、患者の名前の値を入力できません。そこでの入力をスキップして、次の入力である性別に直接進むようです。

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 を使用する方が良いですか?

4

2 に答える 2

7

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

したがって、次のようなことができます。

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

また、ユーザーが数値以外を入力した場合に発生する例外を処理できるように準備しておいてください。

于 2013-05-27T03:18:24.427 に答える
0

名前が単一の単語であることが確実な場合 (男性または女性の問題ではない)、スキャナー入力を変更して文字列を取得することができます。

   in.next();

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

于 2013-05-27T03:23:40.007 に答える