我是 java 语言的新手,我不知道如何一次从文本文件中读取一行并获取该行的平均值。
到目前为止,我的工作代码获取了整个文件的平均值:
import java.util.Scanner;
import java.io.*;
public class NumAverage {
public static void main(String[] args) throws IOException {
Scanner keyboard = new Scanner(System.in);
File myFile = new File("Num.txt");
Scanner inputFile = new Scanner(myFile);
int numbersCounter = 0;
int sum = 0;
while (inputFile.hasNext()) {
int numList = inputFile.nextInt();
sum = sum + numList;
numbersCounter++;
}
System.out.println("Average: " + (sum/numbersCounter));
inputFile.close();
}
}
这是文本文件的样子
1 2 3 4
5 6 7 8
最佳答案
你可以使用 Files.lines()
创建一个文本行流,然后将每一行解析为一个数字数组并对它们进行平均。
Files.lines(Paths.get("nums.txt"))
.map(str -> str.split(" "))
.mapToDouble(arr -> Arrays.stream(arr).mapToInt(Integer::valueOf).average().orElse(0.0))
.forEach(avg -> System.out.println("Average: " + avg));
Files.lines()
处理所有文件 I/O 并创建一个 Stream<String>
这允许在从文件中读取每一行时对其进行延迟处理。如果有一天您需要处理内存中放不下的非常大的文件,这将非常有用,因为每一行只有在前一行被 Stream 完全处理后才会被读取。它会在完成后自动为您关闭文件。
下一行获取文件中的每一行并将其转换为一个字符串数组,每个数字一个。那时,流从 Stream<String>
更改为到 Stream<String[]>
下一行将每个 String[] 转换为一个数字,该数字是该行数字的平均值。它通过获取字符串数组并使用 Arrays.stream()
从中创建一个 Stream 来实现。 ,使用 Integer.valueOf()
将每个字符串更改为整数, 然后调用 average()
获取整个整数流并计算平均值。此时 Stream 现在是一个 DoubleStream
.
下一行取每个平均值并打印出来。
整个操作序列发生在每一行上,因此在从文件中读取下一行之前先打印第一行的平均值。
关于java - 如何从文本文件中获取 2 个单独的数字平均值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36972554/