Menu
Coddy logo textTech

まとめ - 図形計算機

CoddyのJavaジャーニー「オブジェクト指向プログラミング」セクションの一部 — レッスン 33/87。

challenge icon

チャレンジ

簡単

この章で学んだすべてのポリモーフィズムの概念を統合した図形計算機を作成しましょう。抽象クラス Shape とその具体的なサブクラスを作成し、ポリモーフィズムを使用して面積を計算し、統一された形式で表示します。

コードは4つのファイルに分けて構成します:

  • Shape.java: すべての図形の基礎となる抽象クラスを作成します。すべての図形は name フィールド(String)を持ちます。これを初期化するためのコンストラクタ、ゲッターメソッド getName()、および double を返す抽象メソッド getArea() を含めてください。また、[name]: [area](area は String.format("%.2f", getArea()) を使用して小数点以下2桁にフォーマットされたもの)を返す describe() メソッドも追加してください。
  • Circle.java: Shape を継承する具体的なクラスを作成します。円は radius フィールド(double)を持ちます。super を使用して名前として "Circle" を渡します。Math.PI * radius * radius を使用して面積を返すように getArea() を実装してください。
  • Rectangle.java: Shape を継承する別の具体的なクラスを作成します。長方形は widthheight フィールド(ともに double)を持ちます。親コンストラクタに名前として "Rectangle" を渡します。幅と高さを掛け合わせた面積を返すように getArea() を実装してください。
  • Main.java: ポリモーフィズムの動作を実証する図形計算機を構築します。円の半径、長方形の幅、および高さの3つの入力を受け取ります。

    Circle と Rectangle を作成し、それらを Shape 参照の配列に格納します。配列をループで回し、各図形について describe() メソッドを使用してその説明を出力してください。

    ループの後、すべての図形の合計面積を Total area: [sum](これも小数点以下2桁にフォーマット)の形式で計算して出力します。各図形の参照に対して getArea() を呼び出すことで、別のループまたはアキュムレータを使用して面積を合計してください。

3つの入力を受け取ります:円の半径(double)、長方形の幅(double)、および長方形の高さ(double)。

出力は3行にする必要があります。各図形の説明が1行ずつ続き、最後に合計面積が表示されます。抽象型 Shape を通じて異なる図形を統一的に扱いながら、各図形が独自の方法で面積を計算していることに注目してください!

自分で試してみよう

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // 入力を読み込む
        double radius = scanner.nextDouble();
        double width = scanner.nextDouble();
        double height = scanner.nextDouble();
        
        // TODO: radius を使用して Circle オブジェクトを作成する
        
        // TODO: width と height を使用して Rectangle オブジェクトを作成する
        
        // TODO: Shape 参照の配列を作成し、両方の図形をそこに格納する
        
        // TODO: 配列をループで回し、describe() を使用して各図形の説明を表示する
        
        // TODO: すべての図形の合計面積を計算する
        // ループまたはアキュムレータを使用して、各図形の getArea() を呼び出して面積を合計する
        
        // TODO: "Total area: [sum]" という形式で合計面積を表示する
        // フォーマットには String.format("%.2f", totalArea) を使用する
    }
}

オブジェクト指向プログラミングのすべてのレッスン