我正在制作一个从格式化文本文档中读取数据的程序:
行星数据
行星直径(km)质量(kg)g(m / s ^ 2)
- Mercury 4880 3.30E + 23 3.70
- Venus 12104 4.87E + 24 8.87
- 地球12756 5.97E + 24 9.79
- Mars 6794 6.24E + 23 3.61
- Jupiter 142984 1.90E + 27 24.80
- 土星120536 5.68E + 26 10.43
- 天王星51118 8.68E + 25 8.86
- 海王星49352 1.02E + 26 11.17
在文本文件中,它更漂亮,但基本上它是一个四列文档,每个列都有一个数字信息。我正在使用扫描仪类尝试只读取最后一列数字,但是无法通过大量的nextLine()调用找到一种简单的方法。有没有更好的方法来搜索那些双打,并用扫描仪将它们拉成阵列?
这段代码会编译,但是一旦运行就会出现不匹配错误。
public static double [] getGravity()throws IOException{
Scanner inFile = new Scanner(new File("PlanetaryData.txt"));
double [] getGrav = new double[8];
for(int i = 0; i < 8; i++){
getGrav[i] = inFile.nextDouble();
getGrav[i] /= 10;
System.out.println(getGrav[i]);
}
return getGrav;
}
答案 0 :(得分:0)
1)您的数据文件有几行标题,您需要先仔细跳过它们。您的列表包含一些空白行,然后是一些HTML格式,因此不清楚实际数据文件的外观。
2)你的数据由4列组成,但是你的代码试图读取8个双打 - 这是错误的。这些列也有不同的类型:单词double double double,因此您需要按此顺序读取它。像这样:
// .. do some header skipping here
ArrayList<Double> gravity = new ArrayList<>(8);
while (inFile.hasNext()){ // try to read one data line
inFile.next(); // skip name
inFile.nextDouble(); // skip diameter
inFile.nextDouble(); // skip mass
gravity.add(inFile.nextDouble()/10); // gravity
}
return gravity.toArray();