设计一个Java程序:完成:学生成绩的统计。 设文本文件score.txt中的内容是:每一行中每个部分的含义是: 学号 姓名 语文 数学,每个部分之间用至少一个或以上的空格隔开。 A001 王平 85 88 A002 李华 80 76 A003 蒋新民 72 65 等等 要求统计出语文、数学的总平均成绩(小数点后边保留1位)、每一位学生的总分。写入到文本文件result.txt中。格式如下: 语文平均分:xx.x 数学平均分:xx.x A001 王平 总分:xxx A002 李华 总分:xxx A003 蒋新民 总分:xxx 最后用记事本程序查看result.txt文件的内容。
时间: 2024-04-03 17:35:38 浏览: 123
语言程序设计资料:java-俄罗斯方块-java语言.doc
以下是一个简单的实现,可以参考:
```java
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
public class ScoreStatistics {
public static void main(String[] args) throws IOException {
// 读取score.txt文件
BufferedReader reader = new BufferedReader(new FileReader("score.txt"));
String line;
Map<String, Integer> totalScores = new HashMap<>(); // 每个学生的总分
int chineseTotal = 0; // 语文总分
int mathTotal = 0; // 数学总分
int studentCount = 0; // 学生总数
while ((line = reader.readLine()) != null) {
String[] parts = line.split("\\s+"); // 正则表达式分割空格
if (parts.length != 4) {
System.err.println("Invalid line: " + line);
continue;
}
String name = parts[1];
int chineseScore = Integer.parseInt(parts[2]);
int mathScore = Integer.parseInt(parts[3]);
chineseTotal += chineseScore;
mathTotal += mathScore;
int totalScore = chineseScore + mathScore;
totalScores.put(name, totalScore);
studentCount++;
}
reader.close();
// 计算平均分
double chineseAvg = (double) chineseTotal / studentCount;
double mathAvg = (double) mathTotal / studentCount;
// 输出结果到result.txt文件
FileWriter writer = new FileWriter("result.txt");
writer.write("语文平均分:" + String.format("%.1f", chineseAvg) + "\n");
writer.write("数学平均分:" + String.format("%.1f", mathAvg) + "\n");
for (Map.Entry<String, Integer> entry : totalScores.entrySet()) {
writer.write(entry.getKey() + " 总分:" + entry.getValue() + "\n");
}
writer.close();
}
}
```
该程序首先读取score.txt文件,将每个学生的总分、语文总分和数学总分统计出来。然后计算平均分,最后将结果输出到result.txt文件中。输出结果时,使用String.format方法控制小数点后一位的精度。
阅读全文