是数学还是编码错误?

时间:2013-11-21 17:01:49

标签: java math gravity

我正在编写一个程序来计算行星的表面引力(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();
}
}

1 个答案:

答案 0 :(得分:2)

您需要对单位进行一些转换才能修复计算。

  1. 您的行星直径以英里为单位。你需要将它们转换成米。您可以在planetDiameter数组中进行一些乘法运算。例如,将3032替换为3032 * 1000 * 1.609344。或者你可以在getSurfaceGravity

    中完成
    double g = (universalConstant * mass)/Math.pow((1000 * 1.609344 * diameter / 2), 2);
    
  2. 在从getSurfaceGravity返回之前,你应该将地球表面重力(9.80665 m / s ^ 2)除以g。所以最后一行变成:

    return g / 9.80665;
    
  3. 需要除以地球的表面引力,因为你说你期望水星达到0.38。这意味着你想要以地球引力为单位的值。 (水星表面重力= 0.38 * [地球表面重力])。

    正如评论中所建议的那样,使用%2.2e以科学记数法格式化数字。

    同意自己计算它比仅仅谷歌更有趣!