2017-01-31 4 views
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]); 
     } 

    } 
} 
+2

あなたがそれに割り当てる前に 'gravity [2]'を読み込もうとしています( 'i'が' 2'の繰り返しで起こります)。 Javaではデフォルト値の「0」が与えられ、浮動小数点では「0」で除算されると「INF」が与えられます。 – Kevin

+0

副次的な提案:惑星の名前、半径、質量を保持するPlanetクラスを定義するか、少なくともリストを重力重力法に渡して、同じ情報を繰り返し宣言して初期化する必要はありません。 – synchronizer

+0

@synchronizerこれはバーチャルスクール用です。私は割り当てをしているだけです。 – Techn0mancer

答えて

0

重力[2]は、ループする前に設定するか、Earthまで0で割ります。

関連する問題