ホームページ >Java >&#&チュートリアル >Java で `scanner.nextInt()` の後に `scanner.nextLine()` が失敗するのはなぜですか?

Java で `scanner.nextInt()` の後に `scanner.nextLine()` が失敗するのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-25 01:36:09828ブラウズ

Why Does `scanner.nextLine()` Fail After `scanner.nextInt()` in Java?

scanner.nextLine() とその後の入力への影響について

java.util.Scanner クラスで定義されている Java の nextLine() メソッドは、一般的に次の目的で使用されます。標準入力 (ユーザーのキーボード) からテキスト行を読み取ります。ただし、特定のシナリオで使用すると、予期しない動作が発生する可能性があります。

メニュー ループ内で nextLine() が使用されている次の例を考えてみましょう。

Scanner scanner = new Scanner(System.in);

while (true) {
    // Display menu options
    // ...

    System.out.print("Please enter your selection: ");
    int selection = scanner.nextInt();

    if (selection == 1) {
        // This issue arises here when reading a sentence
        System.out.print("Enter a sentence: ");
        String sentence = scanner.nextLine();
    }
    // ...
}

このコードを実行すると、失敗します。ユーザーが値 1 を入力したときに、ユーザーに文の入力を求めるプロンプトを表示します。代わりに、コードはインデックスの次の入力プロンプトに直接進みます。

この動作の理由は nextLine() の性質にあります。 nextInt() の後に使用すると、入力ストリーム内の残りの改行文字 (n) を読み取って消費します。したがって、文を読み取るために nextLine() を呼び出すと、空の入力バッファーが発生し、空の文字列が返されます。

この問題を解決するには、scanner.nextLine() を使用して改行文字を明示的に使用する必要があります。 ) 各 scanner.nextInt() の後に。これにより、入力バッファがクリアされ、nextLine() が文に対するユーザーの入力を正しく読み取ることができるようになります。

このガイドラインに従うことで、nextLine() を使用する際の不整合を回避し、コードがユーザーを正確に処理できるようになります。シングルパスとマルチパスの両方のシナリオで入力します。

以上がJava で `scanner.nextInt()` の後に `scanner.nextLine()` が失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。