ホームページ >Java >&#&チュートリアル >Java で `scanner.nextInt()` の後に `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 サイトの他の関連記事を参照してください。