インスタンスを複数生成し、操作する

インスタンスを複数生成し、操作する

練習問題11の5

傘立てを表すクラスUmbrellaStandと傘を表すクラスUmbrellaを定義し、UmbrellaStandクラスのインスタンスを5個、Umbrellaクラスのインスタンスを7個生成して、各操作ができるプログラムを作成してください。

 

クラス:UmbrellaStand
変数:
private Umbrella umbrella 傘立てに入っている傘
private static int totalUmbrella すべての傘立てに入っている傘の総数
メソッド:
putUmbrella 機能:引数として渡された傘を傘立てに入れる
   すでに傘が入っている場合は入れない
takeUmbrella 機能:傘立てから傘を取り出して戻り値として返す
   傘が入っていない場合は何も返さない(nullを返す)
static displayTotalUmbrella 機能:すべての傘立てに入っている傘の総数を表示する

 

クラス:Umbrella
変数:
private String color 傘の色
private int size 傘の長さ[cm]
メソッド:
displayInfo 機能:傘の色と長さを表示する

 

クラス:ren11_5(メインのクラス)
・要素数5のUmbrellaStand型の配列を用意して、
5個のUmbrellaStandクラスのインスタンスを生成する
・要素数7のUmbrella型の配列を用意して、
7個のUmbrellaクラスのインスタンスを生成する
(傘の色と長さの設定については実行画面の例を参照)
各機能
(1) 傘を立てる 傘立ての番号、傘の番号を入力させて傘立てに傘を入れる
ただし入力された番号が誤りの場合は傘を入れない
またすでに傘立てに傘が入っている場合は傘を入れない
(2) 傘を取り出す 傘立ての番号を入力させて傘立てから傘を取り出す
ただし入力された番号が誤りの場合は傘を取り出さない
また傘立てに傘が入っていない場合も傘を取り出さない
(3) 総本数表示 すべての傘立てに入っている傘の総数を表示する

 

実行画面

操作を入力して下さい

傘を立てる(1), 傘を取り出す(2), 総本数表示(3), 終了(他)>2
傘立ての番号を入力して下さい(0〜4) > 2
傘が存在しません。

 

操作を入力して下さい
傘を立てる(1), 傘を取り出す(2), 総本数表示(3), 終了(他)>1
傘立ての番号を入力して下さい(0〜4) > 1
0---色:赤, 長さ:60
1---色:橙, 長さ:65
2---色:黄, 長さ:60
3---色:緑, 長さ:70
4---色:青, 長さ:60
5---色:藍, 長さ:65
6---色:紫, 長さ:60
傘の番号を入力して下さい(0〜6) > 6
色:紫, 長さ:60
の傘が立てられました。

 

操作を入力して下さい
傘を立てる(1), 傘を取り出す(2), 総本数表示(3), 終了(他)>1
傘立ての番号を入力して下さい(0〜4) > 3
0---色:赤, 長さ:60
1---色:橙, 長さ:65
2---色:黄, 長さ:60
3---色:緑, 長さ:70
4---色:青, 長さ:60
5---色:藍, 長さ:65
6---色:紫, 長さ:60
傘の番号を入力して下さい(0〜6) > 2
色:黄, 長さ:60
の傘が立てられました。
操作を入力して下さい
傘を立てる(1), 傘を取り出す(2), 総本数表示(3), 終了(他)>1
傘立ての番号を入力して下さい(0〜4) > 1

0---色:赤, 長さ:60
1---色:橙, 長さ:65
2---色:黄, 長さ:60
3---色:緑, 長さ:70
4---色:青, 長さ:60
5---色:藍, 長さ:65
6---色:紫, 長さ:60
傘の番号を入力して下さい(0〜6) > 4
すでに傘が存在します。

 

操作を入力して下さい
傘を立てる(1), 傘を取り出す(2), 総本数表示(3), 終了(他)>2
傘立ての番号を入力して下さい(0〜4) > 5
傘立ての番号が誤っています。

 

操作を入力して下さい
傘を立てる(1), 傘を取り出す(2), 総本数表示(3), 終了(他)>2
傘立ての番号を入力して下さい(0〜4) > 1
色:紫, 長さ:60
の傘が取り出されました。

 

操作を入力して下さい
傘を立てる(1), 傘を取り出す(2), 総本数表示(3), 終了(他)>3
傘立てにある傘の総数は1本です。

 

操作を入力して下さい
傘を立てる(1), 傘を取り出す(2), 総本数表示(3), 終了(他)>0

解答例

class Umbrella {

private String color;
private int size;

 

public Umbrella(String c, int s) {
color = c;
size = s;
}

 

public void displayInfo() {
System.out.println("色:" + color + ", 長さ:" + size);
}
}

import java.io.*;

 

public class ren11_5 {

 

public static void main(String[] args) throws IOException {
BufferedReader br
= new BufferedReader( new InputStreamReader(System.in) );

 

// 傘立てを生成
UmbrellaStand stand[] = new UmbrellaStand[5];
for(int i=0; istand[i] = new UmbrellaStand();
}
Umbrella um;
// 傘を生成
Umbrella umbrella[] = new Umbrella[7];
umbrella[0] = new Umbrella("赤", 60);
umbrella[1] = new Umbrella("橙", 65);
umbrella[2] = new Umbrella("黄", 60);
umbrella[3] = new Umbrella("緑", 70);
umbrella[4] = new Umbrella("青", 60);
umbrella[5] = new Umbrella("藍", 65);
umbrella[6] = new Umbrella("紫", 60);

 

System.out.println("操作を入力して下さい");
System.out.print("傘を立てる(1), 傘を取り出す(2), 総本数表示(3), 終了(他)>");
int n = Integer.parseInt(br.readLine());
int s, u;
while( 1 <= n && n <= 3) {
switch( n ) {
case 1:
System.out.print("傘立ての番号を入力して下さい(0?" + (stand.length-1) + ") > ");
s = Integer.parseInt(br.readLine());
if(s<0 || s>=stand.length) {
System.out.println("傘立ての番号が誤っています。");
break;
}
for(int i=0; iSystem.out.print( i + "---");
umbrella[i].displayInfo();

}
System.out.print("傘の番号を入力して下さい(0?" + (umbrella.length-1) + ") > ");
u = Integer.parseInt(br.readLine());
if(u<0 || u>=umbrella.length) {
System.out.println("傘の番号が誤っています。");
break;
}
stand[s].putUmbrella(umbrella[u]);
break;
case 2:
System.out.print("傘立ての番号を入力して下さい(0?" + (stand.length-1) + ") > ");
s = Integer.parseInt(br.readLine());
if(s<0 || s>=stand.length) {
System.out.println("傘立ての番号が誤っています。");
break;
}

um=stand[s].takeUmbrella();
if(um!=null){
um.displayInfo();
System.out.println("の傘が取り出されました。");
}else {
System.out.println("傘が存在しません。");
}
break;
case 3:
UmbrellaStand.displayTotalUmbrella();
break;
}
System.out.println();
System.out.println("操作を入力して下さい");
System.out.print("傘を立てる(1), 傘を取り出す(2), 総本数表示(3), 終了(他)>");
n = Integer.parseInt(br.readLine());

}
}

 

}

class UmbrellaStand {

private Umbrella umbrella = null;
private static int totalUmbrella = 0;

 

public void putUmbrella(Umbrella u) {
if(umbrella == null) {
umbrella = u;
totalUmbrella++;
u.displayInfo();
System.out.println("の傘が立てられました。");
}
else {
System.out.println("すでに傘が存在します。");
}
}

 

public Umbrella takeUmbrella() {
if(umbrella != null) {
Umbrella u = umbrella;
umbrella = null;
totalUmbrella--;
return u;
}
else {
return null;
}
}

 

public static void displayTotalUmbrella() {
System.out.println("傘立てにある傘の総数は" + totalUmbrella + "本です。");
}
}

 

インスタンスを複数生成し、操作する関連ページ

連続して表示するメソッドを作る for文使用
メソッドを使用して、横幅高さの長方形を表示する
2つの整数の差を計算して表示する メソッド
3つの整数の最小値を返す メソッド
整数nの階乗を計算して表示する メソッド
整数の2乗を表示する メソッド
2乗と4乗を表示するメソッド
4つの整数の中で最小値を表示するメソッド
配列を宣言し、整数逆順に表示する メソッド
クラスを作成し、インスタンスに記憶し表示する
クラスにメソッドを使用する
クラスを作成し、インスタンスに記憶しメソッドを介して表示する
クラスを作成し、メインメソッドを実行し表示を確認する
コンストラクタやメソッドで時計表示
コンストラクタやメソッドで時計表示し何秒か時間を進めたり戻す
メンバ変数、コンストラクタ、メンバメソッドを使用し枚数表示する
メンバ変数、コンストラクタ、メンバメソッドを使用し水量表示する
メンバ変数、コンストラクタ、メンバメソッドを使用し位置表示する
メンバ変数、コンストラクタ、メンバメソッドを使用し財布の中身残量表示する
インスタンス配列を使用して、集計表示を行う コンストラクタ
フィールド変数がprivateで直接参照できないときに返すメソッド
インスタンスを2個生成し操作する
privateを使用して、操作する