Java(オブジェクト指向初級問題)

Java

今回は受講生(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;
			}
		}
	}
}
Java
スポンサーリンク
シェアする
mjpurinをフォローする
ジョイタスネット

コメント

タイトルとURLをコピーしました