基于LinkedHashMap的Java评分系统功能异常求助
评分系统问题分析与修复方案
现存问题
- 输入范围判断逻辑错误:
mark >100 && mark <0这个条件永远为假,因为一个数不可能同时大于100又小于0,应该用逻辑或||。而且判断后没有终止程序,非法输入会继续执行后续逻辑。 - First Class等级无匹配逻辑:当前
First Class对应的阈值是70,遍历到该等级时,mark <70的条件对70及以上的分数不成立,导致这部分分数没有输出结果;同时100分也没有对应的匹配逻辑。 - 冗余异常声明:
main方法声明抛出NullPointerException,但代码中不存在会触发该异常的操作,属于冗余。
修复后的代码
import java.util.*; public class ScoreSystem { public static void main(String[] args) { try { // 用LinkedHashMap存储等级与对应分数上限,保持插入顺序 LinkedHashMap<String, Integer> gradeMap = new LinkedHashMap<>(); gradeMap.put("Fail", 39); // <=39分 gradeMap.put("Third Class", 49); // 40-49分 gradeMap.put("Second Class, Division 2", 59); //50-59分 gradeMap.put("Second Class, Division 1", 69); //60-69分 gradeMap.put("First Class", 100); //70-100分 Scanner scan = new Scanner(System.in); System.out.println("What was your mark?"); int mark = scan.nextInt(); // 修正范围判断逻辑,非法输入直接终止程序 if (mark > 100 || mark < 0) { System.out.println("Invalid Input: out of range."); return; } // 遍历匹配对应等级 for (String grade : gradeMap.keySet()) { if (mark <= gradeMap.get(grade)) { System.out.println("You got a " + grade); break; } } } catch (InputMismatchException e) { System.out.println("Invalid Input, program terminating"); } } }
修复说明
- 把输入范围判断的
&&改为||,并添加return终止程序,避免非法输入进入后续逻辑。 - 将
First Class的分数上限改为100,确保70-100分都能匹配到该等级。 - 把判断条件从
mark < score.get(i)改为mark <= score.get(i),让各等级的分数区间更清晰(比如39分刚好属于Fail)。 - 移除冗余的
NullPointerException声明,并重命名变量score为gradeMap,增强代码可读性。
内容的提问来源于stack exchange,提问作者Ashprit Mehra
相关产品推荐
相关产品推荐

