(Java)inputmismatchexception扫描文件时

时间:2017-12-10 21:25:34

标签: java double java.util.scanner inputmismatchexception

在仅包含双精度的文件上使用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,但据我所知,文件中的所有令牌都是双打的,所以我有点困惑。

2 个答案:

答案 0 :(得分:0)

String SurfaceGravity.txt中没有double值。您可能需要new Scanner(new File("SurfaceGravity.txt"))

请参阅Scanner(String)的javadoc:

  

构造一个新的Scanner,它生成从指定字符串扫描的值。

Scanner(File)

  

构造一个新的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[],但为此您需要找出文件中的行数。