我有一个类 Triangle 和一个扩展 Triangle 的类,名为 IsoscelesRight 。 我得到了这个指示,并从我的老师那里得到了 IsoscelesRight 的提示,但我仍然不确定该怎么做。
IsoscelesRight只取一个double值,但设置边以便形成等腰直角三角形。提示:通过将a和b的边设置为相同的值来做到这一点,并且边c将等于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);
}
}
答案 0 :(得分: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);
}
}
答案 1 :(得分:-1)
在任何三角形中,边都受到Pyphagorean定理的约束,所以如果你打算存储边长,你只需要存储2,并且总是计算第3个(即斜边)。这将占用更少的空间,但需要更多时间来检索斜边,因为SQRT需要时间来计算。所以修改你的模型是因为它不能只存储3个长度用于逻辑上有效的三角形(不需要为3个值占用内存)而不需要在.ctor中进行任何检查。
只需存储A和B侧,斜边根据公式计算:A ^ 2 + B ^ 2 = C ^ 2。 如果您存储所有3个边,则检查值是否根据公式加起来,否则您的三角形将存储逻辑上损坏的数据。
如果我是你的老师,我本来想至少听到这些担忧。实际的类设计可能是应用所需的任何东西 - 无论是速度,性能,数据的逻辑一致性以及上述的所有组合。