2

重複の可能性:
nextInt の後に nextLine を使用する場合のスキャナーの問題

次の 2 つのコード スニペットでは、最初に必要な入力の数を尋ね、ユーザーに特定の種類の入力の数を入力させます。必要な入力が文字列型の場合、最初に s.next() を使用しない限り、必要な入力が 1 つ少なくなりますが、整数の場合は正常に機能します。理由がわかりません。誰か説明してくれませんか?ありがとう

文字列入力と nextLine 関数を含む最初のコード:

public static void main(String args[]){

    Scanner s = new Scanner(System.in);

    int num =  s.nextInt();

    String[] inputs = new String[num];

    for (int i = 0; i < inputs.length; i++) {
        inputs[i]=s.nextLine();
    }
    System.out.println("end of code");
}

整数入力と nextInt 関数を含む 2 番目のコード:

public static void main(String args[]){

    Scanner s = new Scanner(System.in);

    int num =  s.nextInt();

    Integer[] inputs = new Integer[num];

    for (int i = 0; i < inputs.length; i++) {
        inputs[i]=s.nextInt();
    }
    System.out.println("end of code");
}
4

1 に答える 1

0

これは、次の行が原因です。

int num =  s.nextInt();

次の INT は、\n 文字に到達するまで INT のみを返します。

次のようなテスト ファイルがあるとします。

4
1
2
3
4

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

4'\n'
1'\n'
2'\n'
3'\n'
4'\n'

したがって、整数を取得すると、スキャナーの「nextInt()」メソッドの 4 が取得されます。次の行「nextLine()」を取得するように指示すると、その行の残りの '\n' だけが取得され、配列の最初の値には何も格納されません。

反対に、次の整数 "nextInt()" を取得するように指示すると、次の整数が見つかるまで検索が行われ、配列の最初の値に 1 が入ります。

于 2012-10-25T01:47:12.110 に答える