2017-08-31 9 views

答えて

1

答えは非常に簡単です:

Scanner#nextInt()は、ユーザーが整数を提出することを押す改行(ENTER)次の整数を読み取りますが、ありません。

これを理解するには、入力したすべてが、メソッドが読み込もうとしているバッファに書き込まれることを知っておく必要があります。

  • ユーザーがEnter a number:を見て17ENTERを押します。どうなる

    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の改行を読み取ります。
+0

理由を与えています私はinput.nextLineを提出すると、これは起こりませんか? – Incognelo

+1

'nextLine(...)'は改行文字が見つかるまですべての入力を読み込みます。その改行文字が消費されます – ParkerHalo

+0

助けてくれてありがとう – Incognelo

0

これはpurly設計上の決定で、その理由nextInt()は、改行文字を消費しない、まだ解析されていないいくつかの他のトークンが存在する可能性があるので、左の何もないと仮定して、最も不適切であると考えています文字列に改行文字を使用します。

はたとえば、次のような入力
123 123 \n

再びnextInt()を呼び出すと、バッファ
123 \n

に残って次の文字列になりますnextInt()を呼び出すと、
\n

+0

助けてくれてありがとう – Incognelo

関連する問題