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

Java で `scanner.nextLine()` が `scanner.nextInt()` の後に異なる動作をするのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-27 07:21:09928ブラウズ

Why Does `scanner.nextLine()` Behave Differently After `scanner.nextInt()` in Java?

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

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