2

编辑// 我可能认为 Programmr.com 用于检查答案输出与预期输出的代码是错误的。因为这里所有的答案都有几乎相同的公式,而且wiki页面上关于英雄公式的公式也与这里的答案相同。

在本练习中,完成“返回值”的功能。当你调用这个函数时,它应该使用 Heron 公式计算三角形的面积并返回它。

海伦公式:面积 = (s*(sa) (sb) (sc))0.5 其中 s = (a+b+c)/2

我写了这个,但它似乎不正确,我无法弄清楚出了什么问题。这个的输出给出了错误的值:

public class Challenge
{
    public static void main( String[] args )
    {
        double a;

        a = triangleArea(3, 3, 3);
        System.out.println("A triangle with sides 3,3,3 has an area of:" + a);

        a = triangleArea(3, 4, 5);
        System.out.println("A triangle with sides 3,4,5 has an area of:" + a);

        a = triangleArea(9, 9, 9); // ! also realize the 9,9,9 is not even the same as the comment bellow. This was generated by the Programmr.com exercise.  
        System.out.println("A triangle with sides 7,8,9 has an area of:" + a );

    }
    public static double triangleArea( int a, int b, int c )
    {
    double s = (a + b + c)/2;
    double x = ((s) * (s-a) * (s-b) * (s-c));
    double Area = Math.sqrt(x);
    return Area;
}
}



Expected Output
3.897114317029974
6.0
35.074028853269766

Your code's output
2.0
6.0
28.844410203711913
4

7 回答 7

6

使用这个..苍鹭的正式

在此处输入图像描述

在此处输入图像描述

double s = (a + b + c)/2.0d;
double x = (s * (s-a) * (s-b) * (s-c));
double Area= Math.sqrt(x);
return Area;
于 2013-11-01T08:50:26.167 回答
0
double s = (a + b + c)/2;

您正在失去精度。阅读此线程以获取详细信息。

对于您的公式,它应该是:

double Area = Math.sqrt(s * (s - a) * (s - b) * (s - c));

因为当我说精度损失时你不明白,所以你的方法应该是这样的 -

public static double triangleArea( double a, double b, double c ) {
    double s = (a + b + c)/2;
    double Area = Math.sqrt(s * (s - a) * (s - b) * (s - c));

    return Area;
}
于 2013-11-01T08:50:10.250 回答
0

使用的苍鹭公式不正确。您不必乘以 0.5。你可以在这里找到正确的:http ://en.wikipedia.org/wiki/Heron%27s_formula

double s = (a + b + c)/2.0d;
double x = ((s) * (s-a) * (s-B)* (s-c));
return Math.sqrt(x);
于 2013-11-01T08:53:19.150 回答
0

Wikipedia 文章中,您的公式中缺少平方根。正确的解决方案可能是:

public static double triangleArea( int a, int b, int c )
{
    double s = (a + b + c)/2;
    double Area = Math.sqrt((s* (s-a) *(s-b) * (s-c)) * 0.5);
    return Area;
}

编辑: 我忘了删除*0.5第二行中的。这是错误的。

于 2013-11-01T08:54:17.923 回答
0
double s = (a+b+c)/2.0d;
return Math.pow((s*(s-a)*(s-b)*(s-c)),0.5);
于 2014-03-27T11:13:37.623 回答
0

我遇到了同样的问题,并在 Google 上搜索了同样的问题。我遇到了你的问题,我使用的是同一个网站,仅供参考。答案很简单。而不是双 s = (a+b+c)/2;

你使用: double s = (a+b+c)/2.0;

这解决了问题。

于 2014-05-07T21:27:19.553 回答
0

Heron 公式面积 = (s*(sa) (sb) (sc))0.5 其中 s = (a+b+c)/2

double s = (a+b+c)/2.0;

double area =  (s*(s-a)*(s-b)*(s-c));

area = Math.pow(area, 0.5);

return area;
于 2015-05-23T01:33:41.020 回答