ユーザー入力に Scanner.nextLine() を使用する
質問:
なぜScanner.nextLine() メソッドは、次の 2 つの Java コードで異なる動作をします。例?
// Working Example Scanner scanner = new Scanner(System.in); System.out.print("Enter a sentence: "); String sentence = scanner.nextLine();
// Not Working Example while (true) { System.out.print("Enter a sentence: "); int selection = scanner.nextInt(); String sentence = scanner.nextLine(); }
答え:
動作の違いは、scanner.nextInt() が scanner.nextLine() と比較して入力をどのように消費するかによって生じます。
実際の例では、scanner.nextLine() は、スペースを含む入力行全体を、検出されるまで読み取ります。改行文字。対照的に、scanner.nextInt() は入力の整数部分のみを読み取り、残りの文字は入力バッファーに残ります。
nextInt() 呼び出しが後続の nextLine() 呼び出しなしで使用される場合、入力バッファーに残っている文字 (改行文字など) は消費されないため、後続の nextLine() 呼び出しで問題が発生する可能性があります。
動作しない例では、ユーザーが数値を入力すると、残りの改行文字は nextInt() によって消費されません。その結果、後続の nextLine() の呼び出しではすぐに改行文字が読み取られ、その結果、空の文字列が文章に割り当てられます。
この問題を解決するには、各呼び出しの後に、scanner.nextLine() への追加の呼び出しを配置できます。 nextInt() を呼び出して、入力バッファー内の残りの文字を消費します。
以上がJava で `scanner.nextLine()` が `scanner.nextInt()` の後に異なる動作をするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。