0
何らかの理由により、MercuryとVenusが重量フィールドに無限大を印刷します。誰もが問題を見ることができますか?このコードはあなたのために働きますか?他のすべての惑星はうまくいくようです。前もって感謝します!予期しないコードの印刷
import java.util.Scanner;
public class Weight
{
static double getGravity(String name) throws IOException
{
String[] names = {"Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune", "Pluto"};
double[] radii = {2439.7, 6051.9, 6378, 3402.5, 71492, 60270, 25562, 24774, 1195};
double[] masses = {3.3022 * Math.pow(10,23), 4.8685 * Math.pow(10,24), 5.9736 * Math.pow(10,24), 6.4185 * Math.pow(10,23), 1.8986 * Math.pow(10,27), 5.6846 * Math.pow(10,26), 8.6810 * Math.pow(10,25), 1.0243 * Math.pow(10,26), 1.312 * Math.pow(10,22)};
int i = java.util.Arrays.asList(names).indexOf(name);
return 6.67 * Math.pow(10, -11) * masses[i]/Math.pow(radii[i]*1000, 2);
}
static double convertWeight(double originalWeight, double currentGravity, double newGravity)
{
return originalWeight * (newGravity/currentGravity);
}
static void printResults(String name, double gravity, double weight)
{
System.out.printf("%-10s %-8.1f %-8.1f\r\n", name, gravity, weight);
}
public static void main(String[] args) throws IOException
{
Scanner in;
System.out.print("Enter your weight in lbs: ");
in = new Scanner(System.in);
double earthWeight = in.nextDouble();
String[] names = {"Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune", "Pluto"};
//PLUTO IS NOT A PLANET!
double[] gravity = new double[names.length];
double[] weight = new double[names.length];
System.out.printf("%-10s %-8s %-8s\r\n============================================\r\n", "Planet", "Gravity", "Weight (lbs) ");
for(int i=0; i<gravity.length; i++)
{
gravity[i] = getGravity(names[i]);
weight[i] = convertWeight(earthWeight, gravity[2], gravity[i]);
printResults(names[i], gravity[i], weight[i]);
}
}
}
あなたがそれに割り当てる前に 'gravity [2]'を読み込もうとしています( 'i'が' 2'の繰り返しで起こります)。 Javaではデフォルト値の「0」が与えられ、浮動小数点では「0」で除算されると「INF」が与えられます。 – Kevin
副次的な提案:惑星の名前、半径、質量を保持するPlanetクラスを定義するか、少なくともリストを重力重力法に渡して、同じ情報を繰り返し宣言して初期化する必要はありません。 – synchronizer
@synchronizerこれはバーチャルスクール用です。私は割り当てをしているだけです。 – Techn0mancer