簡體   English   中英

如何從數據文件中讀取雙精度數並使用Scanner將它們轉換為數組?

[英]How to read in doubles from a data file and convert them to an array using Scanner?

我基本上試圖從數據文件中讀取雙打並使用Scanner將它們轉換為數組。 我有一個名為“gravityV1.txt”的文件,里面有一堆正面雙打:

3.76

8.87

1.0

3.71

24.92

10.44

8.87

11.15

0.58

其他信息:

以下是我的源代碼的大部分內容,用於計算太陽系中每顆行星(包括冥王星)的重量。 它掃描一個名為“gravityV1.txt”的文件,其中包含前面提到的雙打列表。 然后它應該將txt文件讀入一個數組,計算每個行星的重量(以磅為單位),並在表格中顯示信息。

更多的事情

這個程序使用多種方法(除了主要方法),如果我寫了關於方法調用不正確的任何方法,請打電話給我!

在這種情況下,陣列需要足夠長,以便適合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的方法返回值”?

編寫以下代碼將文件數據轉換為數組。 您需要將所有數據添加到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;
}

double [] gravityData = new double[myFileScanner.nextDouble()];

據推測,文件中的第一個條目是99而不是2.53 ,所以你可以簡單地說

double [] gravityData = new double[myFileScanner.nextInt()];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM