文件没有值

时间:2014-12-12 10:17:35

标签: java arrays file input while-loop

我的invoer.txt文件有双值。但是Java给出了一个回报:没有价值观。 我怎么能解决这个问题?因为我认为代码应该有用。

 import java.io.*;
 import java.util.*;

 public class Lezen {
  private static int aantal = 0;
  private static double totaal = 0;

  public static void main(String[] args) throws FileNotFoundException {


    Scanner sc = new Scanner(new File("src/Opdracht_11_1/invoer.txt"));

    while (sc.hasNextDouble()) {
        double cijfer = sc.nextDouble();

        aantal++;
        totaal = totaal + cijfer;

        System.out.println(cijfer);
    }

    System.out.println("Er staan " + aantal + " getallen in de file");
    System.out.println("Het gemiddelde is: " + (totaal / aantal));


    sc.close();
      }
    }

txt文件的内容:

45.13
188.001
-17.3
12345
-7980.675

输出:

Er staan​​ 0 get in de file

Het gemiddelde是:NaN

1 个答案:

答案 0 :(得分:1)

我怀疑这可能是一个区域设置问题。

  • 记录Scanner.hasNextDouble和nextDouble方法以使用特定于语言环境的" LocalDecimalSeparator"字符作为小数"指向"。

  • OP的语言似乎是荷兰语。 (这就是谷歌翻译的想法......)

  • 特定于语言环境的" LocalDecimalSeparator" " nl-NL"中的字符locale是"," ...根据此页面:http://www.localeplanet.com/java/nl-NL/

但是,输入文件正在使用"。"字符作为小数点。

这可能导致扫描仪无法接收文件中的数字。

尝试更改"。"小数点到","字符。

如果这是问题并且您需要按给定的方式读取文件,那么解决方案是更改读取文件时有效的语言环境:

  • 您可以在应用程序外部执行此操作;例如通过改变环境变量(在U​​nix / Linux上)。

  • 您可以通过更改默认Locale在应用程序中执行此操作;例如使用Locale.setDefault(...)

  • 您只能针对特定的Scanner执行此操作;例如使用Scanner.useLocale(...)。 (另见:How to specify decimal delimiter。)