nextLine() の概要
Java の java.util.Scanner API の nextLine() メソッドにより、開発者は文字列入力を解析できます。ユーザーから。ただし、ループ内で使用する場合、または nextInt() などの他の入力解析メソッドの後に使用する場合は、動作が異なる場合があります。
シナリオ #1:
nextLine() を使用するコード スニペット) 正常に完了しました:
Scanner scanner = new Scanner(System.in); // Wait for user input before continuing String sentence = scanner.nextLine(); // Continue with more input int index = scanner.nextInt();
このシナリオでは、 nextLine() はユーザー入力を待ってから次の処理に進みます。 nextInt().
シナリオ 2:
次に、予期しない動作をするコード スニペットを考えてみましょう。
Scanner scanner = new Scanner(System.in); // Infinite loop while (true) { // Menu options int selection = scanner.nextInt(); // Input only works after reading the number if (selection == 1) { String sentence = scanner.nextLine(); int index = scanner.nextInt(); } }
ここで、nextLine() は次のように動作します。 nextInt() の後にユーザー入力を待ちません。次の行にスキップされ、文を入力できなくなります。
説明:
これらの例の違いは、nextInt() メソッドにあります。数値入力を読み取りますが、その後に続く改行文字 (n) は消費しません。その結果、nextInt() の後に nextLine() が呼び出されるとき、すでに使用されている改行文字を読み取ろうとし、シナリオ 2 の予期しない動作が発生します。
解決策:
これを解決するには、各 nextInt() の後に追加の nextLine() 呼び出しを挿入して、次の行に進む前に行の残りの入力を消費します。入力リクエスト。これにより、 nextLine() は常にユーザー入力を待機するようになります。
以上がJava の `nextLine()` が `nextInt()` の後に予期せぬ動作をするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。