2011-01-04 2 views
1
1. Find circle diameter from radius 
2. Find circle diameter from perimeter 
3. Find circle diameter from area 

4. Find circle perimeter from diameter 
5. Find circle perimeter from radius 

6. Find circle radius from diameter 
7. Find circle radius from perimeter 
8. Find circle radius from area 

現在、当社のモデルクラスは次のように実装します。.. サークルの実装 - この情報を取得するためにモデル化する方法

class Circle { 
    double radius; 

    Circle (double r) { 
    } 

// Solves 6,7,8 
     double getDiameter() {} 
     double getPerimeter() {} 
     double getArea() {} 

// static functions to solve 1-5 
// e.g. public static double getPermiter(double diameter) {..} 
    } 

は、上記のクラスをモデル化するためのより良い方法があり、私ができるように、特定のパラメータ(例えば、半径、直径、面積または周囲)が与えられているので、ユーザは他の情報を見つけることが予想されるので、上記の情報を取り出す。

+0

4-8は冗長動作です。 –

+0

@ org.life.java - 明確にすることはできますか? – Jason

+1

私は、半径フィールドだけで計算、直径、面積、周長が十分であると言っていたので、クラスを設計しているなら、円の中心位置を追加することができれば十分です –

答えて

3

おそらく半径を使用するコンストラクタを持つCircleクラスが好きでしょう。静的ファクトリメソッドを追加して、円周と領域からインスタンスを作成することができます。

public class Circle 
{ 
    double radius; 

    public Circle(double radius) 
    { 
     this.radius = radius; 
    } 

    public static Circle fromCircumference(double circumference) 
    { 
     return new Circle(circumference/(Math.PI * 2)); 
    } 

    public static Circle fromArea(double area) 
    { 
     return new Circle(Math.sqrt(area/Math.PI)); 
    } 

    public double getCircumference() 
    { 
     return 2 * Math.PI * radius; 
    } 

    public double getRadius() 
    { 
     return radius; 
    } 

    public double getDiameter() 
    { 
     return 2 * radius; 
    } 

    public double getArea() 
    { 
     return Math.PI * radius * radius; 
    } 
} 
1

IはCircleクラス内の静的パブリックメソッドとして全8つのメソッドを実装(または多分関連付けるヘルパークラスで)、また上記で定義され、適切な静的メソッドを呼び出すことにより取得{直径、境界、半径}宣言する:

public class Circle { 
    double radius; 

    public double getPerimeter() { 
    return getPerimeterFromRadius(radius); 
    } 

    // ... 

    public static double getPerimeterFromRadius(double radius) { 
    return 2 * Math.PI * radius; 
    } 

} 
1

私が理解しているように、あなたは必ずしもサークルそのものが必要なわけではありませんが、たとえば、指定された半径でサークルの可能性のある領域を数えたいとします。

私はむしろこれらの静的関数をすべて別のユーティリティクラスに移動したいと思います。慣例により、そのようなクラス名は、それが使用されるクラスまたはインタフェースの複数形である。したがって、それはCirclesと命名されます。

public class Circles { 

    public static double diameterFromRadius(double radius) {...} 

    public static double diameterFromPerimeter(double perimeter) {...} 

    public static double perimeterFromArea(double area) {...} 

    ... 
} 

あなたはまだいくつかの理由でクラスCircleが必要な場合(それがない場合)、その後、すなわち任意のセッターを削除し、すべてのフィールドfinalを作るサークルを不変にするために検討してください。

public class Circle { 
    final double radius; 

    public Circle (double r) { 
     this.radius = r; 
    } 

    public double getRadius() { 
     return radius; 
    } 
} 
関連する問題