我有一个类三角形和一个扩展三角形的类,称为IsoscelesRight。我从老师那里得到了写IsoscelesRight的指示和提示,但我仍然不知道该怎么做。
IsoscelesRight只取一个双值,但设置两边,从而形成等腰直角三角形。提示:通过将边a和b设置为相同的值来实现这一点,边c将等于1乘以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);
}
}发布于 2012-12-28 01:49:43
你一定是在找:
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-28 02:03:52
在任何三角形中,边都受到Pyphagorean定理的约束,因此,如果你打算存储边的长度,只需要存储2,而第三个边(即次元)总是被计算出来的。这将占用较少的空间,但需要更多的时间来检索低音值,因为SQRT需要时间进行计算。因此,修改您的模型,因为它不能只为逻辑上有效的三角形存储3个长度(不需要为3个值取内存),而无需在.ctor中进行任何检查。
只需存储侧A和B,按公式A^2 + B^2 = C^2计算低音值。如果存储所有三面,则检查按公式加起来的值,否则三角形将存储逻辑损坏的数据。
如果我是你的老师,我至少会希望听到这些担忧。实际的类设计可能是应用程序所需的一切--无论是速度、性能、数据的逻辑一致性,还是上述所有组合。
https://stackoverflow.com/questions/14063544
复制相似问题