【发布时间】:2013-11-21 17:01:49
【问题描述】:
我正在编写一个程序来计算行星的表面重力 (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();
}
}
【问题讨论】:
-
为什么数字不正确?
printf如何不“包含”这些数字?你得到的输出是什么,你认为它应该是什么? -
预期/实际输出是多少?
-
一行:Mercury 3032.00 330000000000000000000000.00 9583005.55 我希望它是:Mercury 3032 3e23 .38
-
与
%2.2f一致。 -
使用 %2.2e 获取指数值(e 说明符而不是 f)。请参阅 Java Formatter 类。