web-dev-qa-db-ja.com

Javaスキャナーはユーザー入力を待ちません

ユーザーの入力を読み取るためにJavaのスキャナーを使用しています。 nextLineを1回だけ使用すると、問題なく動作します。 2つのnextLineを使用すると、最初はユーザーが文字列を入力するのを待機しません(2番目は待機します)。

出力:

X:Y:(入力待ち)

私のコード

System.out.print("X: ");
x = scanner.nextLine();
System.out.print("Y: ");
y = scanner.nextLine();

なぜこれが起こり得るのでしょうか?ありがとう

14
user2976389

以前に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の入力の読み取りを待機していることです。 。

nextLine()を呼び出す前に、_'\n'_を使用する必要があります。

_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()を直接呼び出すのがより良い方法です)。

35
Alexis C.