2012-04-12 11 views
2

円が円の中心を表す点と円の半径を整数とすると、円の概念をカプセル化したクラスを作成します。コンストラクタ、アクセサおよびミューテータ、およびtoStringおよびequalsメソッドをインクルードします。また、サークルの周囲(2 * PI *半径)と面積(PI *半径^ 2)を返すメソッドも含まれています。ポイントセンターを使用してJavaでサークルクラスを作成しますか?

import java.awt.*; 


public class Circle { 

    private int radius; 

    public Circle() { 

     radius = 1; 
    } 

    public Circle(int x, int y, int r) { 
     super(x, y, c); 
     radius = r; 
    } 

    public int getRadius() { 
     return radius; 
    } 

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

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

これまでのところ、私はポイントコンストラクタ、アクセサ、ミューテータをクラスに追加するのはちょっと混乱しています。

このように見えますか?

protected int x, y; 

    public point() { 

     setPoint(0,0); 

    } 

    public point(int coordx, int coordy) { 
     setPoint(coordx,coordy); 
    } 

    public void setPoint(int coordx, int coordy) { 
     x = coordx; 
     y = coordy; 
    } 
    public int getX() { 
     return x; 
    } 

    public int getY() { 
     return y; 
    } 

    public String toPrint() { 
     return "[" + x + "," + y + "]"; 
    } 

    } 

両方を1クラスで組み合わせることはできますか?私は試してみましたが、サークルには戻り値がないというエラーがありました。どんな洞察も返品可能な恩恵です。もう一度ありがとう。

+0

サークルには次の属性があります。サークルの中心を表す点、円の半径、整数。では、** Circle **クラスの** Point **宣言はどこにありますか? – sarwar026

+0

私が正しく思い出すと、点は半径がゼロに固定された円のスーパークラスとみなすことができます。したがって、私は、Pointクラスを作成し、次にCircleクラスを派生させます。 – BigMike

+0

@BigMike PointがCircleのスーパークラスであれば、半径はありますか? IMHO no。私は、「ポイントは長さゼロの円である」のような関係を作成するために、2つの間に共通するものはあまりないと思う... – Betlista

答えて

0

あなたは、コンストラクタ内のスーパーコンストラクタを呼び出す:

super(x, y, c); 
2

あなたは、単一のクラスに複数のオブジェクトのコンストラクタを持っていることについて話しています。それはできません。 Javaでは、public point()は戻り値の型を持たないメソッドであり、構文的には正しくないと考えています。

ポイントのクラスを作成する必要はありません。 Javaはすでにjava.awt.Pointを提供しています。あなたのCircleクラスにPointのクラスレベルのフィールドを追加するだけでいいですね。

public class Circle { 

    private int radius; 
    private Point point; 

    public Circle() { 
     point = new Point(0, 0); 
     radius = 1; 
    } 

    public Circle(int x, int y, int r) { 
     point = new Point(x, y); 
     radius = r; 
    } 

    public int getRadius() { 
     return radius; 
    } 

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

    public double getPerimeter() { 
     return 2 * Math.PI * radius; 
    } 
} 
+0

ああああ。だから1つのクラス。ではサークルクラスの(0,0)ポイントはどのように設定されますか? GUIを使ってサークルを描かない限り、私はこのようなことをしたことはありません。 – user1316703

+0

私は自分の答えを編集して、それをどのように表示するのですか? –

+0

ああうわーそれは?ありがとうございました。 – user1316703

1

ここではいくつかのコード、サークルは約束通り、それに

public class Point { 
    public Point(int x, int y) { 
     // .. set x and Y coord 
    } 

    // Getters and Setters 
    public int getX() { 
     return x; 
    } 

    public int getY() { 
     return y; 
    } 

    public String toPrint() { 
     return "[" + x + "," + y + "]"; 
    } 
    // Your other Point methods... 


    private int x = 0; 
    private int y = 0; 
} 


public class Circle extends Point { 
    int rad; 

    public Circle (int x, int y, int radius) { 
    super(x, y); 
    rad = radius; 
    } 
    // Your other Circle methods 
} 

を半径を​​追加ポイントの拡張である:なしと別の方法

Circleは、このようになります内線番号は次のとおりです。

class Point { 
    int x; 
    int y; 

    public Point (int x, int y) { 
    this.x = x; 
    this.y = y; 
    } 
    // Getter/Setters and other methods 
} 


public class Circle { 

    Point centre = null; 
    int radius = 0; 

    public Circle(int x, int y, int rad) { 
     centre = new Point(x, y); 
     radius = rad; 
    } 
    // Your other Circle methods 
} 
+0

ああ、それははるかに理にかなっています。ありがとうございました。 CircleからCall Pointを呼び出し、そのような処理を続けます。私はそれをミルに感謝します。 – user1316703

+0

@ user1316703簡単なPointデータメンバーを持つCirlceクラスを使用すると、同じことが実現できます。どちらの方法も良いでしょう。もう一方の方法も追加します。 – BigMike

+1

No - circleはポイントではないため、ポイントクラスを拡張してはいけません。代わりに合成を使用してください – scibuff

0

私はこのようにします

import java.awt.Point; 

public class Circle { 

    private Point center; 
    private int radius; 

    public Circle(){ 
     this(new Point(0, 0)); 
    } 

    public Circle(int x, int y, int radius){ 
     this(new Point(x, y), radius); 
    } 

    public Circle(Point center){ 
     this(center, 1); 
    } 

    public Circle(Point center, int radius){ 
     this.setCenter(center); 
     this.radius = radius; 
    } 

    public int getRadius(){ return this.radius; } 
    public Point getCenter(){ return this.center; } 

    public double getPerimeter(){ return 2 * Math.PI * this.radius; } 
    public double getArea(){ return Math.PI * this.radius * this.radius; } 

    public void setCenter(int x, int y){ 
     this.setCenter(new Point(x, y)); 
    } 

    public void setCenter(Point center){ 
     this.center = center; 
    } 

    public boolean equals(Object o){ 

     if (o == this){ return true; } 
     if (o == null || o.getClass() != this.getClass()){ return false; } 

     Circle c = (Circle) o; 
     return (o.radius == this.radius && o.center.equals(this.center)); 
    } 

    public string toString(){ 
     return "Circle[" + this.center.toString() + ", " + this.radius + "]"; 
    } 
} 
+0

Mind =吹き飛ばされています。これは私がハハを解釈するのは少し難しいです。私はあなたが私を見せようとしているものを手に入れたと思う。 – user1316703

+0

それほど多くはありません。上記のコードでは、メソッドのオーバーロードを使用しています。正しいコンストラクタは、指定された引数に基づいて呼び出されます。利点は、コードの重複を最小限に抑えることです。つまり、関連するinitコードは、他の人はそれを呼ぶ。 – scibuff

関連する問題