• 締切済み

プログラミング(JAVA)

1.つぎのような貯水槽の機能を表現するクラスがあるとします。以下の記述に引数で指定した量だけ水を加えるメソッドaddを付加し、その機能を確認できるようmainメソッドを変更し実行させなさい。ただし、水は最大貯水量を超えては入れられないようにしなさい。最大量に達した場合は、警告メッセージを表示するようにしなさい。 ↓↓自分でやったコードですここまでできました///次がわかりません class WaterTank6_1 { double capacity = 100.0; // 最大貯水量(初期値が100リットル) double meter = 0.0; // 水量計の値 void show() { System.out.println(“現在の貯水量は “ + meter + “リットルです。”); } public static void main(String[] args) { WaterTank6_1 tank1 = new WaterTank6_1(); tank1.show(); } } addの仕様 void add(double val)

みんなの回答

回答No.3
  • tlmg
  • ベストアンサー率50% (2/4)
回答No.2

このような質問を見るとTAしていた頃を思い出します。 何かの課題のように見受けられるので解答は他の方に任せて、プログラミングで詰まった場合の考え方をひとつ。 もし、どうすればいいのかわからなくなってしまった場合は、問題を分割して簡単なことから実装して行きます。 今回の場合はまず、addに引数で指定した量の水を加える機能だけを付け加えるべきでしょう。 これはmeterを更新するだけなので、簡単にできると思います。(わからなければJavaの基本的な部分が理解できていないのでしょう) 実装したらtank1.showとtank1.addを使って正しく動作しているか確認します。このテスト作業をサボると後々になって泣きを見ることになります。 次はaddを、最大貯水量を越えないように作り変えます。 ただし警告などはせず、最大貯水量を越えるような場合は何もしないようにするだけ良いです。 おそらくif, meter, capacityを使うことになるでしょう。(実装したらまたテストを) 最後は貯水量を越えるaddをしたときに警告を表示するように変更すれば完成です。 初心者のうちは難しいと思いますが、問題を分割することと、その都度テストすることを心掛ければ出来ない問題ではないはずです。

回答No.1

そこらへんのソースをパクってテキトーに組み立てたので、 動くかどうかはしりませんが、イメージは湧くと思います。 また、そこまで求めているのか知りませんが、doubleより BigDecimalを利用した方がいいかもしれません。 public static void main(String[] args) { WaterTank6_1 tank1 = new WaterTank6_1(); while (true) { int x; System.out.print("input integer: "); InputStreamReader isr = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(isr); try { String buf = br.readLine(); if (buf.equals("")) { break; } x = Integer.parseInt(buf); } catch (ClassCastException e) { x = 0; } try { tank1.add(x); catch (IllegalArgumentException e) { System.out.println(e.getMessage()); } tank1.show(); } } void add(double val) { if (this.meter + val > this.capacity) { throw new IllegalArgumentException("最大量超過"); } this.meter += val; }

関連するQ&A