0
     System.out.print("Input the number of persons: ");
     Scanner scanner = new Scanner(System.in);
     int noOfP = scanner.nextInt();

     Person[] person = new Person[noOfP];

     String name;
     int age;
     for(int i = 0; i < person.length; i++){
        System.out.println("Input name for guest: ");
        name = scanner.nextLine();
        System.out.println("Input age for guest: ");
        age = scanner.nextInt();

        person[i] = new Person(name,age);
     }

Person配列を初期化して名前と年齢を設定したかっただけですが、InputMismatchExceptionアット行がスローされますage = scanner.nextInt();

4

2 に答える 2

1

の後に Enter キーをscanner.nextInt()押すと、最後の改行文字が削除されることはありません。この理由ではInteger.parseInt(scanner.nextLine())なく、私はいつもそれを使うのが最も簡単だと思っていました。scanner.nextInt()これらの問題は決して発生しません。

于 2016-03-27T06:28:51.693 に答える
1

人数を尋ねると、ユーザーは数字を入力するだけでなく、入力ストリームに行末記号も挿入します。そのため、名前を尋ねると、名前が表示されず、名前の直前に行末記号が表示されます。そして.nextInt()年齢を重ねると、ようやく名前が出てきます。したがって、最初に行う必要があるscanner.nextLine()のは、値を読み取った後に追加しnoOfPて、その行ターミネータをスキップすることです。それは最初の人の年齢を通して物事を修正します. そして、物事は再び壊れ始めます。

age を要求するときも同じことを行います: を呼び出しscanner.nextInt()、別の行終端文字をストリームに残します。scanner.nextLine()その後、別の人が必要になるので、2 番目の人に物事が爆発することはありません。

コードは次のようになります。

System.out.print("Input the number of persons: ");
Scanner scanner = new Scanner(System.in);
int noOfP = scanner.nextInt();
scanner.nextLine();

Person[] person = new Person[noOfP];

String name;
int age;
for(int i = 0; i < person.length; i++){
    System.out.println("Input name for guest: ");
    name = scanner.nextLine();
    System.out.println("Input age for guest: ");
    age = scanner.nextInt();
    scanner.nextLine();

    person[i] = new Person(name,age);
}
于 2016-03-27T06:32:52.973 に答える