015-004-009
ArrayListとポリモーフィズムによる図形管理
上級
問題説明
ArrayListとポリモーフィズムによる図形管理
この問題では: Shapeインターフェースを実装したCircleとRectangleクラスをArrayListに格納し、面積によるフィルタリングとソートを行うプログラムを作成します。
学習目標: ポリモーフィズムと動的リストを組み合わせた実用的なデータ操作を理解する
概要
ArrayListにインターフェース型で複数の異なるオブジェクトを格納し、ポリモーフィズムを活用して統一的に処理します。ストリームAPIを使って、面積の閾値によるフィルタリングとソートを実装します。
仕様
Shape インターフェース
double getArea()メソッドを定義
Circle クラス(Shapeを実装)
- フィールド:
double radius - コンストラクタ:
radiusを受け取る getArea():Math.PI * radius * radiusを返すtoString():"Circle(radius=X.X, area=Y.YY)"の形式(areaは小数点以下2桁)
Rectangle クラス(Shapeを実装)
- フィールド:
double width,double height - コンストラクタ:
widthとheightを受け取る getArea():width * heightを返すtoString():"Rectangle(width=X.X, height=Y.Y, area=Z.ZZ)"の形式(areaは小数点以下2桁)
Main クラス
ArrayList<Shape>にCircleとRectangleを追加:new Circle(5.0)new Rectangle(3.0, 4.0)new Circle(2.0)new Rectangle(6.0, 3.0)new Circle(4.0)
- "All shapes:" と表示し、全図形を1行ずつ出力
- 空行を出力
- 面積が15.0以上の図形をフィルタリングし、面積の昇順でソート
- "Shapes with area >= 15.00 (sorted):" と表示し、該当図形を1行ずつ出力
出力形式
All shapes:
Circle(radius=5.0, area=78.54)
Rectangle(width=3.0, height=4.0, area=12.00)
Circle(radius=2.0, area=12.57)
Rectangle(width=6.0, height=3.0, area=18.00)
Circle(radius=4.0, area=50.27)
Shapes with area >= 15.00 (sorted):
Rectangle(width=6.0, height=3.0, area=18.00)
Circle(radius=4.0, area=50.27)
Circle(radius=5.0, area=78.54)
