编写一个程序: 要求通过命令行参数输入 5个学生的成绩 (0~100)的整数, 并将这5个数保存到文件"data.txt"中。 然后,在从文件"data.txt"中读出这5个成绩, 计算平均值,并在控制台窗口输出。 要求:加入相应的异常处理。Java
时间: 2024-11-30 18:17:56 浏览: 13
在Java中,你可以按照以下步骤编写这个程序:
```java
import java.io.*;
import java.util.Scanner;
public class GradeCalculator {
public static void main(String[] args) {
if (args.length != 5) {
System.out.println("错误:请输入5个学生的成绩作为命令行参数。");
return;
}
try {
// 将成绩保存到文件
saveGradesToFile(args);
// 从文件读取成绩并计算平均值
double average = readAndCalculateAverage();
System.out.printf("学生的平均成绩是: %.2f\n", average);
} catch (IOException e) {
System.err.println("发生IO错误: " + e.getMessage());
}
}
private static void saveGradesToFile(String[] grades) throws IOException {
File file = new File("data.txt");
BufferedWriter writer = new BufferedWriter(new FileWriter(file));
for (String grade : grades) {
writer.write(grade + "\n");
}
writer.close();
}
private static double readAndCalculateAverage() throws IOException {
double sum = 0;
int count = 0;
BufferedReader reader = new BufferedReader(new FileReader("data.txt"));
String line;
while ((line = reader.readLine()) != null) {
try {
sum += Double.parseDouble(line);
count++;
} catch (NumberFormatException e) {
System.err.println("无效的成绩:" + line);
continue; //跳过非数字行
}
}
reader.close();
return count > 0 ? sum / count : 0;
}
}
```
在这个程序中,我们首先检查是否收到了五个命令行参数。然后尝试将它们写入文件,如果文件操作过程中发生异常,会捕获`IOException`。接着,我们读取文件内容,计算平均分,同样处理可能出现的`IOException`和非数字输入的情况。
运行此程序时,需要在命令行提供五个以空格隔开的成绩作为参数,例如:
```
java GradeCalculator 92 87 96 88 94
```
然后它会创建一个名为"data.txt"的文件,并显示平均成绩。如果输入有误,它会给出适当的错误信息。
阅读全文