0

我有一个类Triangle和一个扩展Triangle的类,称为IsoscelesRight。我从老师那里得到了这个指令和提示来写IsoscelesRight,但我仍然不确定如何去做。

IsoscelesRight 只取一个 double 值,但设置边以形成等腰直角三角形。提示:通过将边 a 和 b 设置为相同的值来做到这一点,边 c 将等于边 a 乘以二的平方根。确保构造函数适当地调用 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,并且总是计算第三个(即斜边)。这将占用更少的空间,但需要更多的时间来检索斜边,因为 SQRT 需要时间来计算。所以修改你的模型,因为它不能只存储逻辑有效三角形的 3 个长度(不需要为 3 个值占用内存)而无需在 .ctor 中进行任何检查。

只存储A边和B边,斜边按公式计算:A^2 + B^2 = C^2。如果您存储所有 3 个边然后检查值是否根据公式相加,否则您的三角形将存储逻辑损坏的数据。

如果我是你的老师,我至少会想听到这些担忧的声音。实际的类设计可能是应用程序所需的任何东西 - 无论是速度、性能、数据的逻辑一致性以及上述所有组合。

于 2012-12-28T02:03:52.260 回答