オブジェクト指向基本問題。
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);
}
}
}
}

コメント