ホームページ >Java >&#&チュートリアル >`nextInt()` の後に`nextLine()` が誤動作するのはなぜですか? そしてそれを修正するにはどうすればよいですか?

`nextInt()` の後に`nextLine()` が誤動作するのはなぜですか? そしてそれを修正するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-14 13:30:11458ブラウズ

Why Does `nextLine()` Misbehave After `nextInt()` and How Can It Be Fixed?

nextLine() の動作の修正

2 番目のコード例で nextLine() を使用するときに発生する問題は、nextInt() の組み合わせに起因します。

の問題nextInt()

nextLine() は、Enter キーを押す前に入力された空白や文字を含む行全体を消費します。ただし、 nextInt() は数値のみを消費します。数字以外の文字または空白文字が数字の後に続く場合、 nextLine() はそれらを読み取ろうとし、予期しない動作が発生します。

解決策: 残りの改行を消費する

nextLine() が意図したとおりに完全な行を読み取る場合は、各 nextInt() の後に nextLine() 呼び出しを追加して、行上の残りの文字を消費できます。これにより、 nextLine() を使用して文を読み取るときに、完全な行を受け取ることが保証されます。

修正付きの例:

// Example #2 (Corrected)
import java.util.Scanner;

class Test {
    public void menu() {
        Scanner scanner = new Scanner(System.in);

        while (true) {
            System.out.println("\nMenu Options\n");
            System.out.println("(1) - do this");
            System.out.println("(2) - quit");

            System.out.print("Please enter your selection:\t");
            int selection = scanner.nextInt();
            scanner.nextLine(); // Consume remaining newline

            if (selection == 1) {
                System.out.print("Enter a sentence:\t");
                String sentence = scanner.nextLine();

                System.out.print("Enter an index:\t");
                int index = scanner.nextInt();

                System.out.println("\nYour sentence:\t" + sentence);
                System.out.println("Your index:\t" + index);
            }
            else if (selection == 2) {
                break;
            }
        }
    }
}

以上が`nextInt()` の後に`nextLine()` が誤動作するのはなぜですか? そしてそれを修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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