- ベストアンサー
問題の意味が分かりません
javaの勉強をしているのですが問題の意味が分からないため 問題を解けません。 ”私の疑問点は「」を使って表していきます。” 問題文 メインメソッド (1) Lendmanagerクラスのインスタンスlendmanagerを作成する 以下endが入力されるまで(1)~(6)を繰り返す。(実行時は6冊分入力する) 「mainの処理が開始されるときに強制的に(最低でも)6冊分は入力すると言う意味でしょうか」 (2) キーボードから書名、作者名を入力 (3) Bookクラスのインスタンスbookを作成する (4) setTitle()メソッドでタイトルを設定する (5) setAuthor()メソッドで著者名を入力 (6) Lendmanagerクラスのaddメソッドでこの本を追加する(Lendmanagerに本を登録する) (7) 登録終了後Lendmanagerクラスのshow()メソッドで登録された本の書名、作者名を表示 ---------------------------------------------------------------- Lendmanagerクラスでは (1) コンストラクタでBook型の配列aBookを要素5で確保 (2)iLengthに初期値0を設定。(aBookの要素数) (3)add()メソッドでiLengthが5を超えていたら、これ以上追加できませんと言うメッセージを表示「mainメソッドで最初に6冊分入力しているのに要素数が足りなすぎます。main()メソッドのendが入力されるまでと言うのは何の意味があるのでしょう」 (4)iLengthが5を超えていなかったら配列aBookにBook型のオブジェクトbook を追加しiLengthに1を加える (5)show()メソッドではaBookの全ての要素について本の書名、作者名を表示 --------------------------------------------------------------- UML図 Book --------- -title:String -author:String ------------ +setTitle(title:string):void +setAuthor(author:string):void +show():void --------------- Lendmanager -------------- -aBook:Book[] -iLength:int -------------- +Lendmanager() +add(book:Book):void +show():void 以上ですよろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
解説はさておき、ソースを見てください。 import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; public class Problem1 { public static void main(String args[]) { Lendmanager manager = new Lendmanager(); // 本のタイトル、著者名追加ループ while(true) { String title = getInput("title> "); String author = getInput("author> "); if(title.equals("end") || author.equals("end")) { break; } Book b = new Book(); b.setTitle(title); b.setAuthor(author); manager.add(b); } manager.show(); } // プロンプトを表示し、入力を受け取るメソッド private static String getInput(String prompt) { System.out.print(prompt); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str; try { str = br.readLine(); } catch(IOException e) { str = ""; } return str; } } class Book { private String title; private String author; public void setTitle(String title) { this.title = title; } public void setAuthor(String author) { this.author = author; } public void show() { System.out.println(this.title + " " + this.author); } } class Lendmanager { private Book [] aBook; private int iLength; private static final int SIZE = 5; public Lendmanager() { this.aBook = new Book[SIZE]; this.iLength = 0; } public void add(Book book) { // サイズを超過していないかチェック if(iLength < SIZE) { this.aBook[iLength] = book; iLength++; } else { System.err.println("追加不能"); } } // aBook配列を順に回って、表示させる public void show() { for(int i=0 ; i<iLength ; i++) { this.aBook[i].show(); } } } >1 >まずLendmanagerクラスについてですが、 >これはサブクラス(extends)として宣言してよいのでしょうか? 何に対するサブクラスなのか、文面から判断できなかったのですが、 自分のソースでは、Bookクラス、Lendmanagerクラスを用意し、 Problem1クラスでそれらを利用する、という形態にしました。 Problem1のmainメソッドで、Lendmanagerをインスタンス化、 その後、ループ内で本のタイトル、著者名を入力させ、 Bookのインスタンスを作成し、Lendmanagerに登録しています。 >2 >Lendmanagerの-aBook:Book[]ですが、 >Book[] aBook = new Book[5];にprivateをつける場合どのように記述した >らよいのでしょうか? ソースを見ていただければわかりますが、 private Book[] aBook; と宣言した後、コンストラクタ内で, aBook = new Book[SIZE]; としています。 >3 >show()メソッドで最後に全ての内容を表示するわけですが >何に格納してどのように表示するかイメージがわきません。 >どなたかよろしくお願いします。 Bookクラスにshow()メソッドが用意されているので、 aBook配列を順に巡り、それぞれにshow()メソッドを実行させます。 以上でいかがでしょうか? お役に立てば幸いです。
その他の回答 (1)
- secretd
- ベストアンサー率39% (50/126)
まあおっしゃるとおり日本語の問題ですねぇ。 Lendmanagerクラスは本を最大5冊しかもてないようです。 でもそんなこと知らないプログラムを使う人は6冊とか7冊とか入れてくるかも知れません。 そうなったときどーするの?てなわけで 「これ以上追加できません」ってメッセージを表示しろ、って書いてます。 でも、3冊とかで入力を止めたい人とかもいるよね。だから 「endが入力されるまで(1)~(6)を繰り返す」って書いてるわけです。 課題か何かか知らないけれど、実行するときは(Lendmanagerクラスが管理できない)6冊を入れてみて、ちゃんとエラーを吐くことを示してください、っていうのが意図。 ちなみに。Lendmanagerは名前の通り管理クラスだから、そのインスタンスを作る(1)は1回しかやらなくていいはず。問題間違ってません?
補足
丁寧に解説頂きありがとうございました。 問題を解き始めたのですが壁にぶつかってしまいました。 1 まずLendmanagerクラスについてですが、 これはサブクラス(extends)として宣言してよいのでしょうか? 2 Lendmanagerの-aBook:Book[]ですが、 Book[] aBook = new Book[5];にprivateをつける場合どのように記述したらよいのでしょうか? 3 show()メソッドで最後に全ての内容を表示するわけですが 何に格納してどのように表示するかイメージがわきません。 どなたかよろしくお願いします。
お礼
ご回答頂きありがとうございます。 HKBさんのソースプログラムとUML図を比較し、 どのように記述をしたらよいかといったことや プログラムの動きなどを勉強させていただきました。 サブクラス、スーパークラスを理解していないがために このような記述になってしまいました。 ご丁寧に私の疑問点など解説していただきとても助かりました。 ありがとうございました^^