今回は受講生(S氏)作成のオブジェクト指向練習問題をやってみよう。
私には全く思いつかないとてもかわいい問題だ。
実行例
何色の花にしますか?>青
種をいくつ植えますか?>5
何をしますか?1…水汲み2…水撒き3…花壇を見る4…終了>2
水が空っぽです。
何をしますか?1…水汲み2…水撒き3…花壇を見る4…終了>1
水を3杯汲みました。
何をしますか?1…水汲み2…水撒き3…花壇を見る4…終了>2
水を撒きました。
何をしますか?1…水汲み2…水撒き3…花壇を見る4…終了>3
花の色は青
#*....#
何をしますか?1…水汲み2…水撒き3…花壇を見る4…終了>1
水を1杯汲みました。
何をしますか?1…水汲み2…水撒き3…花壇を見る4…終了>2
水を撒きました。
何をしますか?1…水汲み2…水撒き3…花壇を見る4…終了>3
花の色は青
#**...#
何をしますか?1…水汲み2…水撒き3…花壇を見る4…終了>2
水を撒きました。
何をしますか?1…水汲み2…水撒き3…花壇を見る4…終了>3
花の色は青
#***..#
何をしますか?1…水汲み2…水撒き3…花壇を見る4…終了>2
水を撒きました。
何をしますか?1…水汲み2…水撒き3…花壇を見る4…終了>3
花の色は青
#****.#
何をしますか?1…水汲み2…水撒き3…花壇を見る4…終了>2
水が空っぽです。
何をしますか?1…水汲み2…水撒き3…花壇を見る4…終了>1
水を3杯汲みました。
何をしますか?1…水汲み2…水撒き3…花壇を見る4…終了>1
水は満杯です!
何をしますか?1…水汲み2…水撒き3…花壇を見る4…終了>2
水を撒きました。
何をしますか?1…水汲み2…水撒き3…花壇を見る4…終了>2
すべての花が咲いています!
何をしますか?1…水汲み2…水撒き3…花壇を見る4…終了>3
花の色は青
#*****#
何をしますか?1…水汲み2…水撒き3…花壇を見る4…終了>4
アプリケーションを終了します。
水を撒くと花が咲いていく。ドットとアスタリスクで描かれる花壇の様子がとてもいい。
では作っていこう!
実践
1.以下のフィールドを持つFlowerbed(花壇)クラスを作成する。
final int MAXWATER=3;
//一度に持てる水の最大値String color;
//花の色int seedNum;
//種の数int bloom;
//咲いた花の数int water;
//水の量
2.実行例を実現するのに最適なコンストラクタを記述する。
3.実行例を見ながら以下のメソッドの処理内容を記述していく
//水を汲むメソッド
//一度水汲みを行うとMAXWATERになる
public void drawWater()
//花に水を撒くメソッド
//1回の水撒きで水を1消費する。
//水を1消費することで花が1つ咲く
public void waterFlower()
//現在の花壇の状態を表示するメソッド
//花の色を表示し#と*と.を使って花壇を描画する。(*が花で.が種)
//#*....#
public void showStatus()
4.実行例になるようにアプリケーションクラス(FlowerApp.java)を作成する。
作例
public class Flowerbed{
final int MAXWATER=3;
String color;
int seedNum;
int bloom;
int water;
public Flowerbed(String color,int seedNum){
this.color=color;
this.seedNum=seedNum;
}
public void drawWater(){
if(this.water==MAXWATER){
System.out.println("水は満杯です!");
return;
}
int draw=MAXWATER-this.water;
System.out.println("水を"+draw+"杯汲みました。");
this.water+=draw;
}
public void waterFlower(){
if(this.water==0){
System.out.println("水が空っぽです。");
return;
}
if(this.seedNum==this.bloom){
System.out.println("すべての花が咲いています!");
return;
}
System.out.println("水を撒きました。");
this.water--;
this.bloom++;
}
public void showStatus(){
System.out.println("花の色は"+this.color);
System.out.print('#');
for(int i=0;i<this.seedNum;i++){
if(i < this.bloom){
System.out.print('*');
}else{
System.out.print('.');
}
}
System.out.println('#');
}
}
FlowerAppクラス(FlowerApp.java)
import java.util.*;
public class FlowerApp{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
System.out.print("何色の花にしますか?>");
String color=sc.next();
System.out.print("種をいくつ植えますか?>");
int seedNum=sc.nextInt();
Flowerbed fb=new Flowerbed(color,seedNum);
while(true){
System.out.print("何をしますか?1…水汲み2…水撒き3…花壇を見る4…終了>");
int select=sc.nextInt();
switch(select){
case 1:
fb.drawWater();
break;
case 2:
fb.waterFlower();
break;
case 3:
fb.showStatus();
break;
default:
System.out.println("アプリケーションを終了します。");
return;
}
}
}
}
コメント