可能性のある複製:
nextIntの後にnextLineを使用するときのスキャナーの問題
ユーザーがスキャナーを使用して配列に値を入力できるプログラムを作成しようとしています。
ただし、プログラムが生徒の近親者を要求した場合、ユーザーは何も入力できず、プログラムはすぐに終了します。
以下は私が行ったコードです:
if(index!=-1)
{
Function.print("Enter full name: ");
stdName = input.nextLine();
Function.print("Enter student no.: ");
stdNo = input.nextLine();
Function.print("Enter age: ");
stdAge = input.nextInt();
Function.print("Enter next of kin: ");
stdKin = input.nextLine();
Student newStd = new Student(stdName, stdNo, stdAge, stdKin);
stdDetails[index] = newStd;
}
Next();を使用してみました。しかし、それは私が望んでいたものではないユーザー入力の最初の単語だけを取るだけです。とにかくこの問題を解決する方法はありますか?
この問題は、改行_\n
_文字であるEnterキーを押すと発生します。 nextInt()
は整数のみを消費しますが、改行_\n
_をスキップします。この問題を回避するには、int
を読み取った後に、_\n
_を消費する可能性があるinput.nextLine()
を追加する必要がある場合があります。
_Function.print("Enter age: ");
stdAge = input.nextInt();
input.nextLine();.
// rest of the code
_
問題はinput.nextInt()
にあり、この関数はint値のみを読み取ります。したがって、input.nextLine()
で読み続けると、 "\ n"が表示されます Enter キー。したがって、これをスキップするには、input.nextLine()
を追加する必要があります。
_Function.print("Enter age: ");
stdAge = input.nextInt();
input.nextLine();
Function.print("Enter next of kin: ");
stdKin = input.nextLine();
_
なぜnext()
が機能しないのですか?
next()は次のトークンを返し、nextLine()はNextLineを返します。違いがわかればいい。トークンは、空白で囲まれた空白以外の文字列です。
から Doc
このスキャナーから次の完全なトークンを見つけて返します。完全なトークンの前後に区切り文字パターンに一致する入力が続きます。このメソッドは、前回のhasNext()の呼び出しがtrueを返した場合でも、スキャンの入力を待機している間、ブロックする場合があります。
行の終わりまで読み取るinput.nextLine();
の後にinput.nextInt();
を呼び出します。
例:
Function.print("Enter age: ");
stdAge = input.nextInt();
input.nextLine(); //Call nextLine
Function.print("Enter next of kin: ");
stdKin = input.nextLine();