在某举重比赛中,每个选手的成绩包括抓举成绩和挺举成绩,最后相加得到总成绩。现在有一个文本文件score1.data记录了该比赛中多位选手的分项成绩,该文件内容如下: 姓名:张三,抓举成绩106kg,挺举189kg. 姓名:李四,抓举成绩108kg,挺举186kg. 姓名:王五,抓举成绩112kg,挺举190kg. 现在需要对该成绩进行处理,计算出选手的总成绩后拼接到字符串之后成为新的字符串,格式为: 姓名:张三,抓举成绩106kg,挺举189kg. 总成绩: 295kg 然后将所有信息并写入到目标文件result.data中。 请使用java编码实现该成绩统计系统。 第一步,使用给定的文件名常量创建BufferedReader对象,通过reader对象调用方法readLine读取每一行的内容,并存储到List集合中; 第二步,处理数据; 第三步,使用给定的目标文件名常量创建BufferedWriter对象,并将参数给定的List集合中的字符串依次写入到目标文件中。
时间: 2024-02-03 09:15:48 浏览: 129
以下是Java编码实现该成绩统计系统的代码:
```java
import java.io.*;
import java.util.*;
public class ScoreStatistics {
private static final String SOURCE_FILE = "score1.data"; // 原始文件名常量
private static final String TARGET_FILE = "result.data"; // 目标文件名常量
public static void main(String[] args) throws IOException {
List<String> scores = readScoresFromFile(); // 读取所有选手成绩信息到List集合中
List<String> result = processScores(scores); // 处理所有选手成绩信息,添加总成绩信息,存储到List集合中
writeResultToFile(result); // 将处理后的所有选手成绩信息写入目标文件中
}
// 读取所有选手成绩信息到List集合中
private static List<String> readScoresFromFile() throws IOException {
List<String> scores = new ArrayList<>();
BufferedReader reader = new BufferedReader(new FileReader(SOURCE_FILE));
String line;
while ((line = reader.readLine()) != null) {
scores.add(line);
}
reader.close();
return scores;
}
// 处理所有选手成绩信息,添加总成绩信息,存储到List集合中
private static List<String> processScores(List<String> scores) {
List<String> result = new ArrayList<>();
for (String score : scores) {
String[] fields = score.split(",");
String name = fields[0].substring(3);
int snatch = Integer.parseInt(fields[1].substring(5, fields[1].length() - 2));
int cleanJerk = Integer.parseInt(fields[2].substring(5, fields[2].length() - 3));
int total = snatch + cleanJerk;
String scoreWithTotal = String.format("%s. 总成绩: %dkg", score, total);
result.add(scoreWithTotal);
}
return result;
}
// 将处理后的所有选手成绩信息写入目标文件中
private static void writeResultToFile(List<String> result) throws IOException {
BufferedWriter writer = new BufferedWriter(new FileWriter(TARGET_FILE));
for (String score : result) {
writer.write(score);
writer.newLine();
}
writer.close();
}
}
```
注意事项:
1. 该实现假设源文件中每行记录的顺序都是姓名、抓举成绩、挺举成绩,且格式都是固定的。
2. 该实现假设源文件中每行记录都是合法的,即没有缺少字段、字段格式错误等问题。
3. 该实现假设目标文件的文件名常量和源文件的文件名常量不会发生变化。如果需要允许用户在运行时指定文件名,则需要修改代码,添加相应的命令行参数解析逻辑。
阅读全文