编辑//我可能认为Programmr.com用来检查答案输出与预期输出的代码是错误的。因为这里的所有答案都具有几乎相同的公式,并且维基页面上关于英雄公式的公式与此处的答案相同。
在本练习中,完成“返回值”的功能。当你调用这个函数时,它应该使用Heron的公式计算三角形的面积并返回它。
苍鹭的公式: 面积=(s *(s-a)(s-b)(s-c))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
答案 0 :(得分:5)
使用此..苍鹭的公式
double s = (a + b + c)/2.0d;
double x = (s * (s-a) * (s-b) * (s-c));
double Area= Math.sqrt(x);
return Area;
答案 1 :(得分:0)
double s = (a + b + c)/2;
你正在失去精确度。有关详细信息,请阅读此thread。
对于你的公式,它应该是:
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;
}
答案 2 :(得分: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);
答案 3 :(得分:0)
从Wikipedia article开始,您在公式中缺少平方根。正确的解决方案可能是:
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
。这是错误的。
答案 4 :(得分:0)
double s = (a+b+c)/2.0d;
return Math.pow((s*(s-a)*(s-b)*(s-c)),0.5);
答案 5 :(得分:0)
我遇到了同样的问题并搜索了Google。我遇到了你的问题,我正在使用同一个网站FYI。答案很简单。代替 double s =(a + b + c)/ 2;
您使用: double s =(a + b + c)/2.0;
这解决了这个问题。
答案 6 :(得分:0)
苍鹭的配方 面积=(s *(s-a)(s-b)(s-c))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;