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

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

Mary-Kate Olsen
リリース: 2024-12-27 07:21:09
オリジナル
886 人が閲覧しました

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

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