有一个文件名为 grade.txt 的文本文件,存放着某班学生的学号、数据结构课成绩(第 2 列)和python课程成绩(第 3 列)。请编程完成下列要求: (1)分别求这个班数据结构和python课程的平均分(保留 1 位小数)并输出。 (2)找出两门课都不及格( <60)的学生,输出他们的学号和各科成绩。 (3)找出两门课的平均分在 90 分以上的学生, 输出他们的学号和各科成绩。
时间: 2024-02-06 16:02:59 浏览: 70
这是一个典型的文件处理任务,可以使用Java中的File、Scanner和PrintWriter类来读写文件。以下是一个可能的解决方案:
```java
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.Scanner;
public class GradeAnalyzer {
public static void main(String[] args) {
try {
// 打开输入文件
Scanner input = new Scanner(new File("grade.txt"));
// 初始化变量
int count = 0;
double dsSum = 0, pySum = 0;
PrintWriter failWriter = new PrintWriter("fail.txt");
PrintWriter topWriter = new PrintWriter("top.txt");
// 逐行读取输入文件
while (input.hasNextLine()) {
String line = input.nextLine();
String[] fields = line.split("\\s+"); // 使用空格分割每行数据
// 提取学号、数据结构成绩和Python成绩
String id = fields[0];
int ds = Integer.parseInt(fields[1]);
int py = Integer.parseInt(fields[2]);
// 统计总分和人数
dsSum += ds;
pySum += py;
count++;
// 输出不及格学生信息到fail.txt
if (ds < 60 && py < 60) {
failWriter.printf("%s\t%d\t%d\n", id, ds, py);
}
// 输出两门课平均分都在90分以上的学生信息到top.txt
if ((ds + py) / 2.0 >= 90) {
topWriter.printf("%s\t%d\t%d\n", id, ds, py);
}
}
// 计算平均分并输出
double dsAvg = dsSum / count;
double pyAvg = pySum / count;
System.out.printf("数据结构平均分:%.1f\n", dsAvg);
System.out.printf("Python平均分:%.1f\n", pyAvg);
// 关闭文件
input.close();
failWriter.close();
topWriter.close();
} catch (FileNotFoundException e) {
System.err.println("文件不存在!" + e.getMessage());
}
}
}
```
这个程序首先打开输入文件,然后逐行读取文件,并对每一行进行处理。处理过程中,统计总分和人数,并根据题目要求输出不及格学生和平均分在90分以上的学生的信息到相应的输出文件中。最后计算平均分并输出到控制台。注意在输出文件时,我们使用了PrintWriter类,并使用了格式化字符串来控制输出格式。
阅读全文