首页 > 解决方案 > 扫描文件中的双精度数组 | 爪哇

问题描述

我试图扫描一个包含双精度数组的文件。我正在使用下面的代码,但它只0.0为每个条目输出。为什么会这样,我该如何解决?

Scanner scanner = new Scanner("file.txt");
double[] array = new double[256 * 256];
for (int i = 0; i < array.length; i++) {
    if (scanner.hasNextDouble()) {
        array[i] = scanner.nextDouble();
    }
}
System.out.println(array[0]);

我正在扫描的文件的一个示例是

0.22131145 0.22131145 0.22131145 0.22841525 0.22841525 ...

标签: javaarraysfileiojava.util.scanner

解决方案


主要问题在于 Scanner 对象的实例化。在这种情况下,您需要将一个File对象传递给它,而不仅仅是一个字符串,并确保您指定了正确的文件路径。请参阅官方文档以获取建议。

其次,您需要使用while循环。if 语句只会执行一次,但您希望扫描程序在文件中有信息时继续查找。

第三,不要使用数组来存储值。这太冒险了,因为您需要事先知道数组的大小,这意味着您需要循环两次,这将是低效的,或者您正在硬编码,就像您在这里所做的那样。如果有人要从文件中添加或删除值,您将得到意想不到的结果。而是使用动态数据结构,例如List.

public static void main(String[] args) throws FileNotFoundException {
    String filepath = "file.txt";
    Scanner scanner = new Scanner(new File(filepath));
    List<Double> list = new ArrayList<>();

    while (scanner.hasNextDouble()) {
        list.add(Double.valueOf(scanner.next()));
    }

    scanner.close();
    System.out.println(list.get(0));
}

推荐阅读