これがいつも頭を悩ませます。while ループ内でフィールド「名前」と「病気」の複数単語の文字列を読み取って保存しようとしています。これが私のコードです:
while(OR1.isFull() == false || OR2.isFull() == false)
{
// prompt for next request
System.out.println("Enter patient info:");
// read patient info
System.out.print("Name: ");
String name = input.nextLine();
input.nextLine();
System.out.print("Malady: ");
String malady = input.nextLine();
input.nextLine();
System.out.print("Priority: ");
int priority = input.nextInt();
// store patient info
Patient patient = new Patient(name, malady, priority);
OR1.add(patient);
} // end while
System.out.println("List of patients scheduled for Operating Room 1");
while(OR1.isEmpty() == false)
{
// pop and print root
System.out.print(OR1.remove());
}
そして、ここに私のコンソールの入力と出力がどのように見えるかがあります:
患者情報を入力してください:
名前: John Doe
病気: 股関節の骨折
優先度: 6
手術室 1 に予定されている患者のリスト
患者: 疾患: 股関節の骨折 優先度: 6
// コンソール出力を終了します。
「名前」に入力した値が記録されていないことに注意してください。また、「病気」を取得した後に追加の入力行を求められたことにも注意してください (次の入力を求めるには、Enter キーをもう一度押す必要がありました。 」)。
http://docs.oracle.com/javase/6/docs/api/java/util/Scanner.htmlのドキュメントを読みました。next() と nextLine() のさまざまな組み合わせを試しました。私はそれを理解していません。
コードを次のように変更することで問題が解決しました。
// read patient info
System.out.print("Name: ");
input.nextLine();
String name = input.nextLine();
System.out.print("Malady: ");
String malady = input.nextLine();
System.out.print("Priority: ");
int priority = input.nextInt();
このばかげたスキャナーがどのように機能するかについてはまだ混乱していますが =/