0

クラスTriangleと、 IsoscelesRightと呼ばれるTriangleを拡張するクラスがあります。先生からIsoscelesRightを書くようにとの指示とヒントを得ましたが、どうすればよいかまだわかりません。

IsoscelesRight は double 値を 1 つだけ取りますが、直角二等辺三角形が形成されるように辺を設定します。ヒント: 辺 a と辺 b を同じ値に設定することでこれを行います。辺 c は辺 a に 2 の平方根を掛けた値に等しくなります。コンストラクターが適切に super() を呼び出していることを確認してください。

public class Triangle
{
    private double sideA;
    private double sideB;
    private double sideC;

public Triangle(double a, double b, double c)
{
    sideA = a;
    sideB = b;
    sideC = c;
}

public double getSideA()
{
    return sideA;
}

public double getSideB()
{
    return sideB;
}

public double getSideC()
{
    return sideC;
}
}

変更が必要なIsoscelesRightについては、次のとおりです。

public class IsoscelesRight extends Triangle
{
    public IsoscelesRight(double side)
    {
        super(side, side, side);
    }
}
4

2 に答える 2

1

あなたが探している必要があります:

public class IsoscelesRight extends Triangle {
  public IsoscelesRight(double side) {
    super(side, side, Math.sqrt(2) * side);
  }
}

これは明らかに宿題なので、理由についての調査はあなたに任せます。

fこのコードを教授に提出するだけで、ほぼ確実に努力を得ることができることに注意してください。

わずかに優れた (そして確かにより明るい) 解決策は次のとおりです。

public class Isosceles extends Triangle {
  public Isosceles(double side, double hypotenuse) {
    super(side, side, hypotenuse);
  }
}

public class Right extends Isosceles {
  public Right(double side) {
    super(side, Math.sqrt(2) * side);
  }
}
于 2012-12-28T01:49:43.060 に答える
-1

どの三角形でも辺はピファゴラスの定理によって制約されるため、辺の長さを保存する場合は 2 を保存するだけでよく、3 番目の辺 (つまり斜辺) は常に計算されます。これはスペースを節約しますが、SQRT は計算に時間がかかるため、斜辺の取得に時間がかかります。.ctor でチェックを行わないと、論理的に有効な三角形の 3 つの長さを格納できないため (3 つの値のメモリを取得する必要はありません)、モデルを修正してください。

辺 A と B を保存するだけで、斜辺は次の式に従って計算されます: A^2 + B^2 = C^2。3辺すべてを保存する場合は、式に従って値が加算されることを確認してください。そうしないと、三角形が論理的に破損したデータを保存します。

もし私があなたの先生だったら、少なくともこれらの懸念の声を聞きたかったでしょう. 実際のクラス設計は、速度、パフォーマンス、データの論理的一貫性、および上記のすべての組み合わせなど、アプリケーションに必要なものであれば何でもかまいません。

于 2012-12-28T02:03:52.260 に答える