2011-01-04 3 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 

Zurzeit ist unsere Modellklassen wie dies umgesetzt werden ..Kreis Umsetzung - Wie um zu modellieren, um diese Informationen zu holen

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) {..} 
    } 

Gibt es einen besseren Weg, um die oben Klasse zu modellieren, so dass ich Holen Sie die obigen Informationen ab, da der Benutzer aufgrund eines bestimmten Parameters (z. B. Radius, Durchmesser, Fläche oder Umfang) andere Informationen finden soll.

+0

4-8 sind redundanter Betrieb. –

+0

@ org.life.java - können Sie klären? – Jason

+1

Ich wollte sagen, dass nur Radius Feld ist genug, um zu berechnen, Durchmesser, Fläche, Umfang, also wenn Sie eine Klasse entwerfen, ich denke, diese Operationen würden auch ausreichen, wenn Sie die Mitte des Kreises hinzufügen können, wäre es nett –

Antwort

3

Ich würde wahrscheinlich eine Circle-Klasse mit einem Konstruktor bevorzugen, der den Radius verwendet. Sie können statische Factory-Methoden hinzufügen, um Instanzen aus dem Umkreis und dem Bereich zu erstellen.

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

würde ich alle 8 Methoden als statische öffentliche Methoden innerhalb der Circle-Klasse (oder vielleicht in einem assoziierten Hilfsklasse) implementieren und erklären auch die get {Durchmesser, Umfang, Radius} durch die richtigen statischen Methoden aufrufen oben definiert:

1

Wie ich verstehe, brauchen Sie nicht immer einen Kreis selbst, sondern zum Beispiel möchten Sie die Kreisfläche nach dem gegebenen Radius zählen.

Ich würde lieber alle diese statischen Funktionen in eine separate Dienstprogramm-Klasse verschieben. Laut Konvention ist ein solcher Klassenname eine Pluralform einer Klasse oder Schnittstelle, mit der er verwendet wird. Also wird es Circles genannt werden.

public class Circles { 

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

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

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

    ... 
} 

Wenn Sie noch Klasse benötigen Circle aus irgendwelchen Gründen dann betrachten Sie Ihren Kreis unveränderlich zu machen (wenn es nicht ist), das heißt alle Setter entfernen und alle Felder final zu machen.