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

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

Barbara Streisand
リリース: 2024-12-21 11:37:17
オリジナル
721 人が閲覧しました

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート