我正在尝试打印给定长度的三角形的面积和周长。我已经成功打印了正确的周长,但是,我的区域不正确(该区域的输出为0.00)。我意识到这是精度损失,但是我无法解决。有人可以检查此代码并指出问题,特别是在实例方法calculateArea处吗?谢谢。
public class Triangle
{
private int sideA=0, sideB=0, sideC=0, perimeter=0;
private double area=0;
public Triangle()
{
}
public Triangle(int a, int b, int c)
{
setSides(a,b,c);
}
public void setSides(int a,int b, int c)
{
sideA=a;
sideB=b;
sideC=c;
}
public void calculateArea()
{
int s;
s=(int)perimeter/2;
double area=Math.sqrt(s*(s-sideA)*(s-sideB)*(s-sideC));
}
public void calculatePerimeter()
{
perimeter=sideA+sideB+sideC;
}
public void printTriangle()
{
System.out.printf("The triangle with sides %d , %d and %d has an area of %.3f and perimeter %d%n", sideA, sideB, sideC, area, perimeter);
}
}
供参考(您无需进行任何纠正),这是我的其他代码。
public class TriangleRunner
{
public static void main(System[]args)
{
Triangle isoceles = new Triangle();
isoceles.setSides(3,3,3);
isoceles.calculateArea();
isoceles.calculatePerimeter();
isoceles.printTriangle();
Triangle right345 = new Triangle();
right345.setSides(3,4,5);
right345.calculateArea();
right345.calculatePerimeter();
right345.printTriangle();
}
}
最佳答案
您正在perimeter
中使用calculateArea
,但这仅在calculatePerimeter
中计算,尚未被调用,因此perimiter
仍为0
。您可以先调用calculatePerimeter
,然后再调用calculateArea
,但是最好在calculatePerimeter
中调用calculateArea
以确保您可以使用它。
因为perimeter
值取决于其他值,所以将其作为实例变量不是一个好主意。您可能需要在calculatePerimeter
中返回该值,并在必要时将其用作局部变量。
另外,将s
中的calculateArea
更改为double
,然后用double
文字2.0
而不是2
除以强制执行浮点计算。
通过这些更改,我得到正确的输出。