给出该题的Java代码:学生成绩存储在文件中,每行一个学生成绩,形如: 20151201 85 84 91.5 20151202 70 85 65 … 请编程读入学生成绩,并计算各门课程的均值和方差,写入文件的最后一行,如: 均值和方差 71/10 81.2/11.3 76/15.3
时间: 2024-02-05 18:12:20 浏览: 98
以下是该题的Java代码实现:
```java
import java.io.*;
public class StudentScore {
public static void main(String[] args) {
try {
// 读取文件
FileInputStream fis = new FileInputStream("score.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(fis));
// 初始化各门课程的总分、平均分和方差
double sum1 = 0, sum2 = 0, sum3 = 0;
double avg1 = 0, avg2 = 0, avg3 = 0;
double var1 = 0, var2 = 0, var3 = 0;
// 统计各门课程的总分
String line;
while ((line = br.readLine()) != null) {
String[] scores = line.split("\\s+");
sum1 += Double.parseDouble(scores[1]);
sum2 += Double.parseDouble(scores[2]);
sum3 += Double.parseDouble(scores[3]);
}
// 计算各门课程的平均分和方差
int count = 0;
fis.getChannel().position(0);
while ((line = br.readLine()) != null) {
String[] scores = line.split("\\s+");
double score1 = Double.parseDouble(scores[1]);
double score2 = Double.parseDouble(scores[2]);
double score3 = Double.parseDouble(scores[3]);
avg1 = (avg1 * count + score1) / (count + 1);
avg2 = (avg2 * count + score2) / (count + 1);
avg3 = (avg3 * count + score3) / (count + 1);
var1 = (var1 * count + Math.pow(score1 - avg1, 2)) / (count + 1);
var2 = (var2 * count + Math.pow(score2 - avg2, 2)) / (count + 1);
var3 = (var3 * count + Math.pow(score3 - avg3, 2)) / (count + 1);
count++;
}
br.close();
// 写入文件
FileOutputStream fos = new FileOutputStream("score.txt", true);
PrintWriter pw = new PrintWriter(fos);
pw.format("均值和方差\t%.1f/%.1f\t%.1f/%.1f\t%.1f/%.1f\n",
avg1, Math.sqrt(var1), avg2, Math.sqrt(var2), avg3, Math.sqrt(var3));
pw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
在该代码中,我们首先使用 `FileInputStream` 和 `BufferedReader` 读取文件中的学生成绩,并通过 `split()` 方法将每行成绩按空格分割为三个分数。然后,我们使用三个变量 `sum1`、`sum2` 和 `sum3` 分别统计各门课程的总分。
接下来,我们通过 `FileInputStream` 和 `BufferedReader` 再次读取文件,这一次我们需要计算各门课程的平均分和方差。我们定义三个变量 `avg1`、`avg2` 和 `avg3` 分别表示各门课程的平均分,三个变量 `var1`、`var2` 和 `var3` 分别表示各门课程的方差。我们使用一个计数器 `count` 统计文件中的行数,以便在计算平均分和方差时使用。
最后,我们使用 `FileOutputStream` 和 `PrintWriter` 将均值和方差写入文件的最后一行。注意,我们需要将 `FileOutputStream` 的第二个参数设置为 `true`,表示在文件末尾追加内容。在 `PrintWriter` 中,我们使用 `format()` 方法来格式化字符串输出。
阅读全文