我的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
答案 0 :(得分:1)
我怀疑这可能是一个区域设置问题。
记录Scanner.hasNextDouble和nextDouble方法以使用特定于语言环境的" LocalDecimalSeparator"字符作为小数"指向"。
OP的语言似乎是荷兰语。 (这就是谷歌翻译的想法......)
特定于语言环境的" LocalDecimalSeparator" " nl-NL"中的字符locale是"," ...根据此页面:http://www.localeplanet.com/java/nl-NL/
但是,输入文件正在使用"。"字符作为小数点。
这可能导致扫描仪无法接收文件中的数字。
尝试更改"。"小数点到","字符。
如果这是问题并且您需要按给定的方式读取文件,那么解决方案是更改读取文件时有效的语言环境:
您可以在应用程序外部执行此操作;例如通过改变环境变量(在Unix / Linux上)。
您可以通过更改默认Locale
在应用程序中执行此操作;例如使用Locale.setDefault(...)
。
您只能针对特定的Scanner
执行此操作;例如使用Scanner.useLocale(...)
。 (另见:How to specify decimal delimiter。)