如何将用户输入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) + ")"); }
顺便修复原代码的几个小问题
- 最低分获取错误:原代码用
Collections.min(invalidnums)是错误的,应该从过滤掉-1的有效成绩列表中查找 - 平均分计算错误:原代码直接输出总和
sum,且sum包含了结束标记-1,需要先计算实际有效成绩的总和再除以数量 - 输入适配:用
scan.nextDouble()代替scan.nextInt(),支持小数成绩输入 - 资源泄漏:最后记得关闭
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
相关产品推荐
相关产品推荐

