gpt4 book ai didi

Java 使用 Heron 公式导致精度损失

转载 作者:行者123 更新时间:2023-11-30 03:11:00 24 4
gpt4 key购买 nike

我正在尝试打印给定长度的三角形的面积和周长。我已成功打印出正确的周长,但是我的面积不正确(面积的输出为 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();
}
}

最佳答案

您在 calculateArea 中使用 perimeter,但这仅在 calculatePerimeter 中计算,尚未调用,因此 perimiter 仍然是 0。您可以简单地在调用 calculateArea 之前先调用 calculatePerimeter,但最好在 calculateArea 中调用 calculatePerimeter确保您可以使用它。

由于周长值取决于其他值,因此将其作为实例变量并不是一个好主意。您可能希望在 calculatePerimeter 中返回该值,并在必要时将其用作局部变量。

此外,将 calculateArea 中的 s 更改为 double,然后除以 double 文字 2.0 而不是 2,强制进行浮点计算。

通过这些更改,我得到了正确的输出。

关于Java 使用 Heron 公式导致精度损失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33642550/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com