平面図形を表す抽象クラス、正三角形を表すサブクラス、正方形を表すサブクラスを作成し、図形の面積を表示するプログラム

平面図形を表す抽象クラス、正三角形を表すサブクラス、正方形を表すサブクラスを作成し、図形の面積を表示するプログラム

練習問題8

平面図形を表す抽象クラスPlaneFigure、正三角形を表すサブクラスRegularTriangle、正方形を表すサブクラスSquareを作成し、図形の面積を表示するプログラムを作成する。

 

ただし、平面図形の種類に1, 2以外の値が入力された場合には再入力を促し、処理の途中で何らかのExceptionが発生した場合には「例外が発生しました。」と表示してプログラムを終了してください。

 

実行画面

平面図形の個数を入力して下さい > 3【enterキー】

平面図形の種類を入力して下さい(1:正三角形, 2:正方形) > 2【enterキー】
1辺の長さを入力して下さい > 5【enterキー】
平面図形の種類を入力して下さい(1:正三角形, 2:正方形) > 1【enterキー】
1辺の長さを入力して下さい > 2【enterキー】
平面図形の種類を入力して下さい(1:正三角形, 2:正方形) > 3【enterキー】
平面図形の種類を入力して下さい(1:正三角形, 2:正方形) > 2【enterキー】
1辺の長さを入力して下さい > 4【enterキー】
正方形 1辺の長さ=5.0 面積=25.0
正三角形 1辺の長さ=2.0 面積=1.7320508075688772
正方形 1辺の長さ=4.0 面積=16.0

平面図形の個数を入力して下さい > 7【enterキー】

平面図形の種類を入力して下さい(1:正三角形, 2:正方形) > 1q【enterキー】
例外が発生しました。

 

抽象クラス:PlaneFigure

  • メンバ変数: side (double型) 図形の1辺の長さ
  • コンストラクタ:  機能:1辺の長さを設定する
  • 抽象メソッド: displayArea()  機能:(図形の名称と1辺の長さと)面積を表示する

     

    サブクラス:RegularTriangle (extends PlaneFigure)

  • コンストラクタ:スーパークラスのコンストラクタを呼んで1辺の長さを設定する
  • メンバメソッド:displayArea() 抽象メソッドのオーバーライド

    ※正三角形の1辺の長さをsとすると、面積は (√3 / 4)×s2 となる。

     

    サブクラス:Square (extends PlaneFigure)

  • コンストラクタ:スーパークラスのコンストラクタを呼んで1辺の長さを設定する
  • メンバメソッド:displayArea() 抽象メソッドのオーバーライド

    ※正方形の1辺の長さをsとすると、面積は s2 となる。

     

    クラス:ren14_8(メインのクラス)

  • キーボードから読み込んだ個数を要素数とするPlaneFigure型の配列を作成し、

    キーボードからの入力にしたがって正三角形や正方形のインスタンスを生成する

     

  • 解答例

    abstract class PlaneFigure {

     

    public double side;

     

    public PlaneFigure(double s) {
    side = s;
    }

     

    abstract public void dislayArea();

     

    }

    class RegularTriangle extends PlaneFigure {

     

    public RegularTriangle(double s) {
    super(s);
    }

     

    public void dislayArea() {
    System.out.print("正三角形 1辺の長さ=" + side);
    System.out.println(" 面積=" + (Math.pow(side, 2.0) * Math.sqrt(3.0) / 4.0) );
    }

     

    }

    class Square extends PlaneFigure {

     

    public Square(double s) {
    super(s);
    }

     

    public void dislayArea() {
    System.out.print("正方形 1辺の長さ=" + side);
    System.out.println(" 面積=" + Math.pow(side, 2.0) );
    }

     

    }

    import java.io.*;

     

    public class ren14_8 {

     

    public static void main(String[] args) {

     

    int num, type;
    double side;
    BufferedReader br = new BufferedReader(
    new InputStreamReader(System.in));

     

    try {
    System.out.print("平面図形の個数を入力して下さい > ");
    num = Integer.parseInt(br.readLine());

     

    PlaneFigure planeFigure[] = new PlaneFigure[num];

     

    for(int i=0; iSystem.out.print("平面図形の種類を入力して下さい(1:正三角形, 2:正方形) > ");
    type = Integer.parseInt(br.readLine());
    if(type==1 || type==2) {
    System.out.print("1辺の長さを入力して下さい > ");
    side = Double.parseDouble(br.readLine());
    }
    else {
    i--;
    continue;
    }

     

    switch(type) {
    case 1:
    planeFigure[i] = new RegularTriangle(side);
    break;
    case 2:
    planeFigure[i] = new Square(side);
    break;
    }
    }

     

    for(int i = 0; i < planeFigure.length; i++) {
    planeFigure[i].dislayArea();
    }

     

    }
    catch (Exception e) {
    System.out.println("例外が発生しました。");
    }

     

    }

     

    }