我正在编写一个程序来计算行星的表面引力(http://en.wikipedia.org/wiki/Surface_gravity)(是的,我知道我可以谷歌它,但那里的乐趣在哪里?)然而数字不正确,也不是我的printf方法用于包含2.2格式的数字。我在这做错了什么?谢谢!
import java.util.Scanner;
import java.io.PrintWriter;
import java.io.File;
import java.io.IOException;
public class GravityV1
{
static String [] planetName = {"Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune", "Pluto"};
static double [] planetMass = {3.30e23, 4.87e24, 5.97e24, 6.42e23,1.90e27, 5.69e26, 8.66e25, 1.03e26, 1.31e22};
static double [] planetDiameter = {3032, 7521, 7926, 4222, 88846, 74898, 31763, 30778, 1466};
static double universalConstant = 6.674e-11;
public static double getSurfaceGravity(double mass, double diameter)
{
double g = (universalConstant * mass)/Math.pow((diameter / 2), 2);
return g;
}
public static void printHeader()
{
System.out.println(" Planetary Data ");
System.out.println(" Planet Diameter (km) Mass (kg) g (m/s^2) ");
System.out.println("------------------------------------------------------------");
}
public static void tab()
{
System.out.print("\t\t");
}
public static void main(String [] args)throws IOException
{
PrintWriter outFile = new PrintWriter (new File("planetGravity.txt"));
printHeader();
outFile.println(" Planetary Data ");
outFile.println(" Planet Diameter (km) Mass (kg) g (m/s^2) ");
outFile.println("------------------------------------------------------------");
for(int index=0;index<planetName.length;index++)
{
double gravity = getSurfaceGravity(planetMass[index], planetDiameter[index]);
System.out.print(planetName[index] + "\t\t");
System.out.printf("%2.2f", planetDiameter[index]);
tab();
System.out.printf("%2.2f", planetMass[index]);
tab();
System.out.printf("%2.2f", gravity);
System.out.println();
outFile.println(planetName[index] + "\t\t" + (planetDiameter[index]) + "\t\t" + planetMass[index] + "\t\t" + gravity);
}
outFile.close();
}
}
答案 0 :(得分:2)
您需要对单位进行一些转换才能修复计算。
您的行星直径以英里为单位。你需要将它们转换成米。您可以在planetDiameter数组中进行一些乘法运算。例如,将3032替换为3032 * 1000 * 1.609344。或者你可以在getSurfaceGravity
:
double g = (universalConstant * mass)/Math.pow((1000 * 1.609344 * diameter / 2), 2);
在从getSurfaceGravity
返回之前,你应该将地球表面重力(9.80665 m / s ^ 2)除以g。所以最后一行变成:
return g / 9.80665;
需要除以地球的表面引力,因为你说你期望水星达到0.38。这意味着你想要以地球引力为单位的值。 (水星表面重力= 0.38 * [地球表面重力])。
正如评论中所建议的那样,使用%2.2e以科学记数法格式化数字。
同意自己计算它比仅仅谷歌更有趣!