在仅包含双精度的文件上使用nextDouble()时,我得到了java.util.inputmismatchexception。以下是相关的代码部分:
public static double[] getGravity() throws IOException
{
Scanner file = new Scanner("SurfaceGravity.txt");
double[] gravity = new double[8];
for(int index = 0; index < gravity.length; index++)
gravity[index] = file.nextDouble(); //Here is where I get the error
file.close();
return gravity;
}
这是SurfaceGravity.txt的内容
3.700465457603474
8.8661999605471
9.8
3.697967684866716
24.776754466506414
10.43814587026926
8.861473215210253
11.131680688084042
0.6128071987535232
我的印象是当令牌是错误的类型时会发生inputmismatchexception,但据我所知,文件中的所有令牌都是双打的,所以我有点困惑。
答案 0 :(得分:0)
String SurfaceGravity.txt
中没有double值。您可能需要new Scanner(new File("SurfaceGravity.txt"))
请参阅Scanner(String)的javadoc:
构造一个新的Scanner,它生成从指定字符串扫描的值。
构造一个新的Scanner,它生成从指定文件扫描的值。
答案 1 :(得分:0)
您给出的示例尚未初始化您想要阅读的文件。
实施中还存在一些问题:例如,假设文件中的项目数量发生了变化,那么您必须更改实施,因为此时您的实施限制为8个值。
public static List<Double> getGravity() throws IOException{
File file = new File("SurfaceGravity.txt");
Scanner input = new Scanner(file);
List<Double> list = new ArrayList<>();
while(input.hasNextDouble()){
list.add(input.nextDouble());
}
return list;
}
注意:如果绝对必要,可以使用double[]
,但为此您需要找出文件中的行数。