用java实现将键盘输入的学生信息(包括学号 姓名和成绩)逐行写入文件 Studentdat,当输入exit时结束。 统计文件Studentdat中包含的学生数,以及平均分、最高分和最低分。 程序检查成绩输入值,如果不是数值信息,或是负的数值信息,或超过成绩范围(100),抛出相应的异常。在抛出异常之前应提供详细的信息说明,从而使使用该程序的用户了解所出现的问题,同时考虑上述异常出现时程序应该如何处理。
时间: 2024-03-02 19:52:53 浏览: 152
好的,这里是Java实现该功能的代码:
```java
import java.io.*;
import java.util.*;
class ScoreException extends Exception {
private float score;
public ScoreException(float score) {
this.score = score;
}
public String toString() {
return "Invalid score: " + score;
}
}
public class Main {
public static void main(String[] args) {
try {
FileWriter writer = new FileWriter("Studentdat.txt");
Scanner scanner = new Scanner(System.in);
int count = 0;
float totalScore = 0;
float highestScore = Float.MIN_VALUE;
float lowestScore = Float.MAX_VALUE;
while (true) {
System.out.print("请输入学生信息(学号 姓名 成绩),输入exit结束:");
String line = scanner.nextLine();
if (line.equals("exit")) {
break;
}
String[] studentInfo = line.split(" ");
if (studentInfo.length != 3) {
System.out.println("输入格式错误");
continue;
}
try {
float score = Float.parseFloat(studentInfo[2]);
if (score < 0 || score > 100) {
throw new ScoreException(score);
}
count++;
totalScore += score;
highestScore = Math.max(highestScore, score);
lowestScore = Math.min(lowestScore, score);
writer.write(line + "\n");
} catch (NumberFormatException e) {
System.out.println("成绩必须是数值信息");
} catch (ScoreException e) {
System.out.println(e);
}
}
if (count == 0) {
System.out.println("没有学生信息");
} else {
System.out.println("学生数:" + count);
System.out.println("平均分:" + String.format("%.2f", totalScore / count));
System.out.println("最高分:" + highestScore);
System.out.println("最低分:" + lowestScore);
}
writer.close();
} catch (IOException e) {
System.out.println("文件操作错误");
}
}
}
```
代码解释如下:
在 Java 中,我们使用 `FileWriter` 类和 `Scanner` 类来实现文件操作和读取键盘输入。首先创建一个 `FileWriter` 类的对象 `writer`,用于写入数据到文件 "Studentdat.txt"。然后创建一个 `Scanner` 类的对象 `scanner`,用于读取键盘输入。
使用一个 `while` 循环来不断读取用户输入的学生信息,当输入为 "exit" 时,跳出循环。对于每一行输入的学生信息,首先使用 `split()` 方法将其分割成学号、姓名和成绩三个部分。如果分割后的长度不为 3,则说明输入格式错误,直接跳过该行输入。
接着,尝试将成绩部分转换为浮点数,并且判断成绩是否在 0 到 100 范围内。如果成绩不是数值信息,或者不在范围内,则抛出自定义异常 `ScoreException` 或 `NumberFormatException` 异常,然后跳过该行输入。如果输入没有问题,则更新计数器和各种统计数据,然后将该行输入写入文件。
最后,如果没有读取到任何学生信息,则输出 "没有学生信息",否则输出学生数、平均分、最高分和最低分。如果文件操作发生错误,则输出 "文件操作错误"。
注意,这里使用了 `try-catch` 语句来捕获可能出现的异常,以保证程序的稳定性。
阅读全文