この質問に対する回答では、なぜinput.nextInt
に改行文字が残っているのかわかりません。なぜinput.nextintメソッドに nが残っているのですか?
Scanner is skipping nextLine() after using next(), nextInt() or other nextFoo()?
この質問に対する回答では、なぜinput.nextInt
に改行文字が残っているのかわかりません。なぜinput.nextintメソッドに nが残っているのですか?
Scanner is skipping nextLine() after using next(), nextInt() or other nextFoo()?
答えは非常に簡単です:
Scanner#nextInt()
は、ユーザーが整数を提出することを押す改行(ENTER
)次の整数を読み取りますが、ありません。
これを理解するには、入力したすべてが、メソッドが読み込もうとしているバッファに書き込まれることを知っておく必要があります。
Enter a number:
を見て17
とENTER
を押します。どうなる System.out.println("Enter a number: ");
int i = scanner.nextInt();
System.out.println("Enter a line: ");
String l = scanner.nextLine();
:
は、次の例を考えています。
17
と表示されますが、改行はENTER
のままにしておきます。Enter a line:
と記述しますが、スキャナは入力待ちではなくENTER
の改行を読み取ります。これはpurly設計上の決定で、その理由nextInt()
は、改行文字を消費しない、まだ解析されていないいくつかの他のトークンが存在する可能性があるので、左の何もないと仮定して、最も不適切であると考えています文字列に改行文字を使用します。
はたとえば、次のような入力 123 123 \n
再びnextInt()
を呼び出すと、バッファ 123 \n
に残って次の文字列になりますnextInt()
を呼び出すと、 \n
助けてくれてありがとう – Incognelo
理由を与えています私はinput.nextLineを提出すると、これは起こりませんか? – Incognelo
'nextLine(...)'は改行文字が見つかるまですべての入力を読み込みます。その改行文字が消費されます – ParkerHalo
助けてくれてありがとう – Incognelo