You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将用户输入ArrayList中的分数值关联对应字母等级

给有效成绩添加字母等级的解决方案

核心思路:新增等级转换方法

先写一个独立方法,根据分数区间返回对应的字母等级,你可以完全按照自己的评分标准调整区间:

private static String getLetterGrade(double grade) {
    if (grade >= 90) {
        return "A";
    } else if (grade >= 85) {
        return "A-";
    } else if (grade >= 80) {
        return "B+";
    } else if (grade >= 75) {
        return "B";
    } else if (grade >= 70) {
        return "C+";
    } else if (grade >= 65) {
        return "C";
    } else if (grade >= 60) {
        return "D";
    } else {
        return "F";
    }
}

修改输出逻辑

在遍历输出有效成绩时,调用这个方法把分数和等级拼接起来,同时跳过作为结束标记的-1:

System.out.println("Here are the "+actualValidCount+" valid grades: ");
for (Double valelement : validnums) {
    if (valelement == -1) {
        continue;
    }
    System.out.println(valelement + " (" + getLetterGrade(valelement) + ")");
}

顺便修复原代码的几个小问题

  1. 最低分获取错误:原代码用Collections.min(invalidnums)是错误的,应该从过滤掉-1的有效成绩列表中查找
  2. 平均分计算错误:原代码直接输出总和sum,且sum包含了结束标记-1,需要先计算实际有效成绩的总和再除以数量
  3. 输入适配:用scan.nextDouble()代替scan.nextInt(),支持小数成绩输入
  4. 资源泄漏:最后记得关闭Scanner释放资源

完整修改后的代码

import java.util.*;
public class Main {

    public static void main(String[] args) {

        ArrayList<Double> invalidnums = new ArrayList<>();
        ArrayList<Double> validnums = new ArrayList<>();
        Scanner scan = new Scanner(System.in);
        double totalinvalidGrade=0, totalvalidGrade=0;


        //INPUT OF THE GRADES THROUGH THE ARRAYLIST
        while (true) {
            System.out.println("Enter a grade: ");
            double grade = scan.nextDouble(); // 支持小数成绩输入
            if (grade <= (-2)) {
                invalidnums.add(grade);
                totalinvalidGrade++;
                System.out.println("Error, Grade must be between (0-100); or -1 to finish");
            } else if (grade >= 101) {
                invalidnums.add(grade);
                totalinvalidGrade++;
                System.out.println("Error, Grade must be between (0-100); or -1 to finish");
            }
            else {
                validnums.add(grade);
                totalvalidGrade++;
            }
            if (grade == -1) {
                break;
            }

        }

        //Start of the GRADES SUMMARY:
        //PRINTS THE AMOUNT OF VALID AND INVALID GRADES POSTED.
        System.out.println("You submitted " +totalinvalidGrade+ " invalid grades");
        // 有效成绩数量要减去结束标记的-1
        int actualValidCount = (int) (totalvalidGrade - 1);
        System.out.println("You submitted " + actualValidCount + " valid grades");

        //PRINTS THE HIGHEST AND LOWEST GRADES ALONG WITH THE AVERAGE.
        // 过滤掉-1,得到实际有效成绩列表
        ArrayList<Double> actualValidGrades = new ArrayList<>();
        for (double g : validnums) {
            if (g != -1) {
                actualValidGrades.add(g);
            }
        }
        if (!actualValidGrades.isEmpty()) {
            double highest = Collections.max(actualValidGrades);
            double lowest = Collections.min(actualValidGrades);
            System.out.println("Highest Grade: "+highest + " (" + getLetterGrade(highest) + ")");
            System.out.println("Lowest Grade: "+lowest + " (" + getLetterGrade(lowest) + ")");

            double sum = 0;
            for (double value : actualValidGrades) {
                sum += value;
            }
            double average = sum / actualValidGrades.size();
            System.out.println("Average: "+average);
        } else {
            System.out.println("No valid grades submitted.");
        }

        //PRINTS THE LIST OF VALID AND INVALID GRADES:
        System.out.println("Here are the "+actualValidCount+" valid grades: ");
        for (Double valelement : validnums) {
            if (valelement == -1) {
                continue;
            }
            System.out.println(valelement + " (" + getLetterGrade(valelement) + ")");
        }
        System.out.println("Here are the "+totalinvalidGrade+" invalid grades: ");
        for (Double element : invalidnums) {
            System.out.println(element);
        }
        scan.close(); // 关闭Scanner释放资源
    }

    private static String getLetterGrade(double grade) {
        if (grade >= 90) {
            return "A";
        } else if (grade >= 85) {
            return "A-";
        } else if (grade >= 80) {
            return "B+";
        } else if (grade >= 75) {
            return "B";
        } else if (grade >= 70) {
            return "C+";
        } else if (grade >= 65) {
            return "C";
        } else if (grade >= 60) {
            return "D";
        } else {
            return "F";
        }
    }
}

内容的提问来源于stack exchange,提问作者anr5565

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 07:33:53