2

コンピューター サイエンスのクラスでプロジェクトを行う必要があります。問題は:

図書館の利用者は、3冊まで借りることができます。したがって、パトロンには名前と最大 3 冊の本があります。本には著者とタイトルがあります。これらのオブジェクトと次の動作を表すために、Patron と Book の 2 つのクラスを設計して実装します。

  • クライアントは、タイトルと著者で本をインスタンス化できます
  • クライアントは本のタイトルや著者を調べることはできますが、変更することはできません
  • クライアントは、特定の本 (タイトルで識別) を借りたかどうかを利用者に尋ねることができます。
  • クライアントは、特定の本 (タイトルで識別) を返却するよう利用者に伝えることができます。
  • クライアントは、常連客に特定の本を借りるように伝えることができます。

Patron クラスは、書籍ごとに個別のインスタンス変数を使用する必要があります (合計 3 つ)。これらの変数はそれぞれ、最初は null です。本を借りるとき、利用者は null ではない変数を探します。そのような変数が見つからない場合、メソッドは false を返します。null 変数が見つかった場合、新しいブックにリセットされ、メソッドは true を返します。同様の考慮事項が他の方法にも当てはまります。メソッド aString.equals(aString) を使用して、2 つの文字列が等しいかどうかを比較します。クラスに適切な toString メソッドを含めて、テスター プログラムでテストしてください。

これがメソッドを含む私のClientクラスです: http://pastebin.com/JpxCT2F6main

今私の問題は、プログラムを実行すると、プログラムがユーザーの入力を待たないことです。Eclipse のコンソールに次のように表示されます。

Please enter title of book 1: 
s
Please enter author of book 1: 
e
Please enter title of book 2: 
f
Please enter author of book 2:
t
Please enter title of book 3: 
g
Please enter author of book 3:
d
Which book would you like to check for?
s
The patron has taken out the book s
Would you like to return a book? (1 yes or 2 no)
1
Which book would you like to return?
Sorry, could not find the book 
Would you like to take out a book? (1 yes or 2 no)
2
Invalid option
Which book would you like to check for?
The patron does not have  taken out
Would you like to return a book? (1 yes or 2 no)

ご覧のとおり、コンソールは「どの本を返却しますか?」の後にユーザー入力を待ちません。代わりに、空白の値を取ります。コードの後半で、「2」を入力しました。これは、本を返さないことを意味しますが、代わりに無効な入力出力が得られます。

4

4 に答える 4

1

コードの 71 行目で使用nextInt()します。これは、ユーザーが提供する整数の回答を取得します。次に、nextLine()whichを使用して、このスキャナを現在の行を超えて進め、スキップされた入力を返します。. スキップされる入力は、前のnextInt()呼び出しからの改行文字のみです (行全体を読み取るのではなく、int のみを読み取ります)。

input.nextLine()入力が必要になる前に 1 回呼び出すか、nextLine()代わりに使用nextInt()して文字列を整数値に変換することで、これをスキップできます。

于 2012-06-08T19:42:21.537 に答える
1

nextLine は改行文字を食べます。nextInt はそれを入力バッファーに残し、次の readLine はすぐに終了します。

簡単な修正: すべてに readLine を使用してから、読み取り文字列から int を解析します。

于 2012-06-08T19:40:00.343 に答える
1

次の行に移動するだけです。input.nextLine();

于 2012-06-08T19:43:48.837 に答える
0

を使用nextInt();して、入力を停止し、応答を待つことができます。

于 2012-10-26T21:10:44.803 に答える