ホームページ >Java >&#&チュートリアル >Java の `nextLine()` が `nextInt()` の後に予期せぬ動作をするのはなぜですか?

Java の `nextLine()` が `nextInt()` の後に予期せぬ動作をするのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-21 11:37:17769ブラウズ

Why Does Java's `nextLine()` Behave Unexpectedly After `nextInt()`?

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 サイトの他の関連記事を参照してください。

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