我正在尝试平均一个包含1000万个数字的文件,每行只有一个数字。我创建了一个名为getAverage()的方法,该方法返回一个double。这是代码:
public double promedioDouble() throws IOException
{
double adder = 0;
int counter = 0;
try{
file = new FileReader(filePath);
reader = new BufferedReader(file);
while(reader.readLine()!=null)
{
adder+=Double.parseDouble(reader.readLine());
counter++;
}
}
catch (IOException e)
{
System.out.println("cant read");
}
finally {
if (file != null) file.close();
}
return adder/counter;
}
我打印了计数器,结果显示5.000.000,我不知道为什么读者无法读取文件中包含的1000万个数字,而它只能读取一半。我需要帮助。
答案 0 :(得分:6)
您要拨打readLine
两次-并忽略在while
条件内返回的行。
尝试:
String line;
while( (line = reader.readLine()) !=null)
{
adder+=Double.parseDouble(line);
counter++;
}
您还可以使用Streams(和try-with-resources-避免使用finally
):
try (Stream<String> stream = Files.lines(Paths.get(fileName)))
{
stream.forEach(s -> {adder+=Double.parseDouble(s); counter++;});
} catch (IOException e) {
e.printStackTrace();
}
答案 1 :(得分:2)
我的回答离您的问题有点远。如果您使用的是Java 8,可以在下面快速执行以下操作:
try (Stream<String> stream = Files.lines(Paths.get(fileName))) {
return stream.mapToDouble(Double::parseDouble)
.average()
.getAsDouble();
} catch (IOException e) {
e.printStackTrace();
}