3

私は基本的に、データファイルから double を読み込んで、Scanner を使用してそれらを配列に変換しようとしています。「gravityV1.txt」というファイルがあり、その中に正の double がたくさん含まれています。

3.76

8.87

1.0

3.71

24.92

10.44

8.87

11.15

0.58

その他の情報:

以下は、太陽系の各惑星 (冥王星を含む) の体重を計算するプログラムのソース コードのほとんどです。前述の double のリストを含む「gravityV1.txt」というファイルをスキャンします。次に、txt ファイルを配列に読み込み、各惑星の重量 (ポンド単位) を計算し、その情報をテーブルに表示することになっています。

さらにいくつかのこと

このプログラムは (main に加えて) 複数のメソッドを使用します。メソッドの呼び出しに関して何か間違ったことを書いている場合は、私を呼び出してください!

この場合、配列は 9 つの惑星の表面重力測定値のそれぞれが収まるのに十分な長さである必要がありますが、配列の長さが必要であることを知らなかった場合、どのように配列を表すでしょうか?

しかし、最も重要なことは...

私はこの問題について広範な調査を行ってきましたが、まだ問題に遭遇しています。以下のソース コードは、「精度が失われる可能性がある」というエラーのため、コンパイルできません。エラー メッセージには、「required: int; found double」というメッセージも表示されます。

このエラーが発生する理由と、このファイルを読み取ってgravityDataという配列にする方法を教えてください。

これは私がこれまでに持っているものです:

import java.util.Scanner;
import java.io.File;
import java.io.IOException;
import java.io.FileReader;
import java.io.PrintWriter;
import java.util.Arrays;

public class WeightOnPlanetsV1
  {
   
    public static void printHeadings( )  //notice method is void, nothing returned
    {
      System.out.printf("%37s\n","My Weight on the Planets");
      System.out.println();
      System.out.printf("%s%20s%20s\n","Planet","Gravity","Weight(lbs)");
      System.out.println("==============================================");
    }

    public static double [] loadGravityData( ) throws IOException
    {
      Scanner myFileScanner = new Scanner(new FileReader("gravity1.txt"));
      int count = 0;  
      double [] gravityData = new double[myFileScanner.nextDouble()];
         for(int i = 0; i < gravityData.length; i++)
         {
            gravityData[i] = myFileScanner.nextDouble();
         }
      myFileScanner.close();
      return gravityData;
    }
 
    public static double [] calculateWeight() throws IOException
    {
        loadGravityData( );
        double [] gravityData = new double[10];
        double [] mass = new double [9];
        double [] weight = new double [9];
        
        int count = 0;
          for(int i = 0; i < 9; i++)
          {
            mass[count] = ((140.0 * 433.59237) / gravityData[count]);  //Calculates mass based on planet's gravity
            weight[count] = (mass[count] * gravityData[count]) / 10;   // calculates weight based on mass, division by 10 is for some physics reason I believe
            count++;
          }
        
       return weight;
    }    
 

// Starts the MAIN! 
   public static void main(String[ ] args) throws IOException
   {
    double [] gravityData = new double [9];
    printHeadings();
    String [] planets = {"Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune", "Pluto"};           
    
    calculateWeight();
    double [] weight = calculateWeight();           
       
    for(int y = 0; y < 9 ; y++)
       {
           System.out.printf("%-11s", planets[y]);     
           System.out.printf("%13.2f", gravityData[y]); 
           System.out.printf("%20.2f\n",weight[y]);
       }
   
  } // end main
   

どんな助けでも大歓迎です!ありがとうございました!

編集:

よし、これは今私が loadGravityData メソッドのために持っているものです:

{
    Scanner myFileScanner = new Scanner(new FileReader("gravity1.txt"));
  int count = 0;  
  double [] gravityData = new double[myFileScanner.nextInt()];
     for(int i = 0; i < gravityData.length; i++)
     {
        gravityData[i] = myFileScanner.nextDouble();
     }
  myFileScanner.close();
  return gravityData;
}

そして、「Main.java:20: エラー: 結果の型が void であるメソッドから値を返すことはできません」というメッセージが表示されます??

4

2 に答える 2

0

次のコードを記述して、ファイル データを配列に変換します。List配列のサイズがわからないため、配列に変換するよりも、すべてのデータを に追加する必要がありますList

public static double [] loadGravityData( ) throws IOException
{
 Scanner sc=new Scanner(new File("gravity1.txt"));
    List<Double> arr=new ArrayList<>();
    while(sc.hasNext()){
        arr.add(sc.nextDouble());
    }
    double doubleArr[]=new double[arr.size()];
    for (int i=0;i< arr.size();i++) {
        doubleArr[i]=arr.get(i);
    }
  return   doubleArr;
}
于 2013-09-30T05:11:56.043 に答える