我基本上是尝试从数据文件中读取双打并使用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的方法返回值”??
答案 0 :(得分: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;
}
答案 1 :(得分:0)
double [] gravityData = new double[myFileScanner.nextDouble()];
据推测,文件中的第一个条目是99
而非2.53
,因此您可以简单地
double [] gravityData = new double[myFileScanner.nextInt()];