私は Java の Scanner を使用してユーザー入力を読み取ります。 nextLine を 1 回だけ使用すれば、問題なく動作します。 nextLine が 2 つある場合、最初の nextLine はユーザーが文字列を入力するのを待ちません (2 番目は待ちます)。
出力:
X: Y: (入力を待つ)
私のコード
System.out.print("X: ");
x = scanner.nextLine();
System.out.print("Y: ");
y = scanner.nextLine();
なぜこのようなことが起こるのか、何か考えはありますか? ありがとうございます
ベストアンサー1
以前と同じようにメソッドを呼び出すことも可能ですnextInt()
。つまり、次のようなプログラムになります。
Scanner scanner = new Scanner(System.in);
int pos = scanner.nextInt();
System.out.print("X: ");
String x = scanner.nextLine();
System.out.print("Y: ");
String y = scanner.nextLine();
あなたが見ている動作を示します。
問題は、nextInt()
が を消費しない'\n'
ため、次の の呼び出しで がnextLine()
消費され、 の入力の読み取りを待機していることですy
。
'\n'
を呼び出す前にを消費する必要がありますnextLine()
。
System.out.print("X: ");
scanner.nextLine(); //throw away the \n not consumed by nextInt()
x = scanner.nextLine();
System.out.print("Y: ");
y = scanner.nextLine();
nextLine()
(実際には、 の直後にを呼び出す方がよいでしょうnextInt()
)。