2601_95695876 2026-03-31 10:03 采纳率: 0%
浏览 10

Java代码,兰州大学马俊Java简单编程-成绩处理

img


有没有人帮我修改一下代码?以下是我的代码
import java.util.Scanner;

public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);

    // 1. 读取学生人数
    int n = sc.nextInt();
    double[] scores = new double[n];
    
    // 2. 读取n个成绩
    for (int i = 0; i < n; i++) {
        scores[i] = sc.nextDouble();
    }
    
    // 3. 初始化最大值、最小值和总分
    double max = scores[0];
    double min = scores[0];
    double sum = 0.0;
    
    // 4. 遍历计算最大值、最小值和总分
    for (double s : scores) {
        if (s > max) {
            max = s;
        }
        if (s < min) {
            min = s;
        }
        sum += s;
    }
    
    // 5. 计算平均分
    double avg = sum / n;
    
    // 6. 按格式输出(保留2位小数,顺序:最高分 最低分 平均分)
    System.out.printf("%.2f %.2f %.2f\n", max, min, avg);
    
    sc.close();
    // 关键修复:显式指定程序正常退出,返回状态码 0
    System.exit(0);
}

}

  • 写回答

2条回答 默认 最新

  • 檀越@新空间 2026-03-31 10:20
    关注

    上午好☀️☀️☀️️
    本答案参考通义千问

    你的代码整体结构是正确的,但有几个地方可以优化或修正,以确保程序的健壮性和可读性。以下是详细的分析和修改建议。


    问题分析

    1. 没有处理学生人数为0的情况:如果用户输入了 n = 0,程序会抛出异常(因为 scores[0] 会访问一个空数组)。
    2. 格式化输出中的顺序问题:题目要求的输出顺序是 最高分 最低分 平均分,而你当前的 printf 格式字符串中是 max, min, avg,这与题意一致,没有错误。
    3. 使用 System.exit(0) 可能不是最佳实践:虽然它不会影响功能,但在某些情况下可能不推荐使用,尤其是在有多个类或线程时。
    4. 代码风格建议:添加注释、使用更清晰的变量名等。

    修改后的代码

    import java.util.Scanner;
    
    public class Main {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
    
            // 1. 读取学生人数
            int n = sc.nextInt();
    
            // 检查学生人数是否合法
            if (n <= 0) {
                System.out.println("学生人数必须大于0!");
                sc.close();
                return; // 退出程序
            }
    
            double[] scores = new double[n];
    
            // 2. 读取n个成绩
            for (int i = 0; i < n; i++) {
                scores[i] = sc.nextDouble();
            }
    
            // 3. 初始化最大值、最小值和总分
            double max = scores[0];
            double min = scores[0];
            double sum = 0.0;
    
            // 4. 遍历计算最大值、最小值和总分
            for (double s : scores) {
                if (s > max) {
                    max = s;
                }
                if (s < min) {
                    min = s;
                }
                sum += s;
            }
    
            // 5. 计算平均分
            double avg = sum / n;
    
            // 6. 按格式输出(保留2位小数,顺序:最高分 最低分 平均分)
            System.out.printf("%.2f %.2f %.2f\n", max, min, avg);
    
            sc.close();
        }
    }
    

    优化点总结

    1. 增加对输入合法性检查

      • 如果 n <= 0,直接提示错误并退出程序,避免空指针异常。
    2. 移除不必要的 System.exit(0)

      • 使用 return 退出 main 方法即可,更加简洁和符合 Java 编程规范。
    3. 增强代码可读性

      • 添加了注释,使逻辑更清晰。
      • 变量命名清晰(如 scores 表示成绩数组)。

    测试用例示例

    假设输入为:

    5
    85.5
    90.0
    78.0
    92.5
    88.0
    

    输出应为:

    92.50 78.00 86.80
    

    注意事项

    • 确保输入的数值都是有效数字(非字符串),否则会抛出 InputMismatchException
    • 如果需要支持多行输入(例如每行一个成绩),请使用 sc.nextLine() 或调整读取方式。

    如果你还有其他需求,比如统计及格率、按分数排序等,也可以告诉我,我可以继续帮你扩展功能。

    评论

报告相同问题?

问题事件

  • 创建了问题 3月31日