オブジェクト指向基本問題。
Q1
プールを表すクラスPoolとそれを実行するアプリケーションクラスを作り
各操作ができるプログラムを作成する
<フィールド変数>
・現在の水量 -water : double
<コンストラクタ>
public Pool()
… 水量を0.0立方メートルにしてインスタンスを生成する。
<メソッド>
public void feedWater(double water)
… 引数として渡された水量だけ給水する
ただし満水(600.0立方メートル)を超える分は給水しない
public void drainWater(double water)
… 引数として渡された水量だけ排水する
public void display()
… 現在の水量を表示する
[実行例]
1. 給水 / 2. 排水 / 3. 表示 / 4. 終了>3 現在の水量は0.0立方メートルです。 1. 給水 / 2. 排水 / 3. 表示 / 4. 終了>1 給水する水量を入力して下さい >200 200.0立方メートル給水しました。 1. 給水 / 2. 排水 / 3. 表示 / 4. 終了>1 給水する水量を入力して下さい >500 400.0立方メートル給水しました。 1. 給水 / 2. 排水 / 3. 表示 / 4. 終了>2 排水する水量を入力して下さい >-200 [排水量は正の値をいれてください。] 排水する水量を入力して下さい >200 200.0立方メートル排水しました。 1. 給水 / 2. 排水 / 3. 表示 / 4. 終了>2 排水する水量を入力して下さい >500 400.0立方メートル排水しました。 1. 給水 / 2. 排水 / 3. 表示 / 4. 終了>3 現在の水量は0.0立方メートルです。 1. 給水 / 2. 排水 / 3. 表示 / 4. 終了>4 アプリケーションを終了します。
Poolクラス
public class Pool { private static final double MAX=600.0d; private double water; public Pool(){ this.water=0.0; } public void feedWater(double water){ double feed=this.water+water > MAX ? MAX-this.water:water; this.water += feed; System.out.printf("%.1f立方メートル給水しました。%n",feed); } public void drainWater(double water){ double drain = this.water-water > 0 ? water : this.water; this.water -= drain; System.out.printf("%.1f立方メートル排水しました。%n", drain); } public void display(){ System.out.printf("現在の水量は%.1f立方メートルです。%n", this.water); } }
PoolAppクラス
import java.util.Scanner; public class PoolApp { public static void main(String[] args) { Pool pool=new Pool(); Scanner s=new Scanner(System.in); while(true){ System.out.print("1. 給水 / 2. 排水 / 3. 表示 / 4. 終了>"); int select=s.nextInt(); switch(select){ case 1: double water; do{ System.out.print("給水する水量を入力して下さい >"); water=s.nextDouble(); if(water<0){ System.out.println("[給水量は正の値をいれてください。]"); } }while(water < 0); pool.feedWater(water); break; case 2: do{ System.out.print("排水する水量を入力して下さい >"); water=s.nextDouble(); if(water<0){ System.out.println("[排水量は正の値をいれてください。]"); } }while(water < 0); pool.drainWater(water); break; case 3: pool.display(); break; default: System.out.println("アプリケーションを終了します。"); s.close(); System.exit(0); } } } }
コメント