Java: Calculate SA of oblate spheroid
Write a program Spheroid.java that takes respectively parameters a and c
as command-line arguments and calculates surface area of an oblate spheroid.
他给了我们要使用的公式,但是当我用他的示例命令行参数运行它时,我得到了完全不同的东西。他的例子给出6和5,得到403.050。我做了我认为正确的事,得到了546.1380388013903。我还没有试着绕过它,我只是想看看我是否接近它。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | public class Spheroid { public static void main(String[] args){ String a = args[0]; String c = args[1]; Double A = Double.parseDouble(a); Double C = Double.parseDouble(c); Double e; Double S; e = Math.sqrt(1-(Math.pow(C, 2)/Math.pow(A, 2))); S = (2 * Math.PI * Math.pow(A, 2)) + (Math.PI * ((Math.pow(C, 2)/ Math.pow(e, 2))) * (Math.log((1+e)/(1-e)))); System.out.println(S); } } |
公式在Java中没有正确表达。以下是对代码的一些更改:
1 2 3 4 5 6 7 8 9 | public static void main(String[] args){ String a = args[0]; //"6"; String c = args[1];; //"5"; double A = Double.parseDouble(a); double C = Double.parseDouble(c); double e = Math.sqrt(1-(Math.pow(C, 2)/Math.pow(A, 2))); double S = (2 * Math.PI * Math.pow(A, 2)) + (Math.PI * ((Math.pow(C, 2)/ e)) * (Math.log((1+e)/(1-e)))); System.out.println(S); } |
输出为:
要将其四舍五入为3dp,可以使用十进制格式:
1 2 3 | DecimalFormat newFormat = new DecimalFormat("#.###"); double threeDecimalPlaces = Double.valueOf(newFormat.format(S)); System.out.println(threeDecimalPlaces); |
在代码中,您使用math.pow(e,2))计算sa。然而,在实际公式中,它只是"e",而不是e的幂2。
最后一行应该是
你用的是