java - 使用键映射到一系列值。字母等级与考试成绩示例

标签 java hashmap

正如标题所示。我需要为 90-100 之间的任何分数返回等级“A”的功能。或者在这种情况下,用户决定根据曲线或其他东西设置任何截止值。这就是我所拥有的,但我想不出一种方法让它做我想做的事。

private HashMap<String, Double> letterGrade = new HashMap<String, Double>();

public void setgradeCutOff(String[] letterGrades, double[] cutoffs) {
        for(int i = 0; i < letterGrades.length; i++){
            letterGrade.put(letterGrades[i], cutoffs[i]);
        }

    }
public String getGrade(String studentName) {
    //Returns a student's average score for all exams
    double averageScore = getAverageExamGrade(studentName);
    for(Entry<String, Double> entry : letterGrade.entrySet()){
        if(entry.getValue() == averageScore){
            return entry.getKey();
        }
    }
    return null;
}

只有当 AverageScore 恰好是截止值之一时,这才有效。如何修改它以便字符串键映射到 setGradeCutOff 方法指定的范围?

这就是我期望的工作方式:

setLetterGradesCutoffs(new String[]{"A","B","C","D","F"}, 
                   new double[] {85,70,60,50,0});

Laura. Average exam score: 87 Grade: A
Peter. Average exam score: 72 Grade: B
Miranda. Average exam score: 67 Grade: C

最佳答案

不需要第三方库,TreeMap 就可以做到,使用floorEntry()方法(Java 6+):

private static TreeMap<Double, String> gradeMap = new TreeMap<>();
static {
    gradeMap.put(85.0, "A");
    gradeMap.put(70.0, "B");
    gradeMap.put(60.0, "C");
    gradeMap.put(50.0, "D");
    gradeMap.put( 0.0, "F");
}
private static void printGrade(double score) {
    System.out.printf("Average exam score: %s Grade: %s%n",
                      NumberFormat.getInstance().format(score),
                      gradeMap.floorEntry(score).getValue());
}

测试

public static void main(String[] args) {
    printGrade(87);
    printGrade(72);
    printGrade(67);
    printGrade(69.99);
    printGrade(70.00);
    printGrade(70.01);
}

输出

Average exam score: 87 Grade: A
Average exam score: 72 Grade: B
Average exam score: 67 Grade: C
Average exam score: 69.99 Grade: C
Average exam score: 70 Grade: B
Average exam score: 70.01 Grade: B

关于java - 使用键映射到一系列值。字母等级与考试成绩示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33620530/

相关文章:

java - 在字符串中查找正则表达式模式

java - springboot单元测试中无法获取resilience4j重试注解执行

java - Hibernate:通过继承类的属性查询对象

java - 数组可以用作 HashMap 键吗?

java - 使用作为参数传递的集合的元素填充 HashMap

java - 为什么在 `HashMap Class` 中的哈希函数中使用 4,20,12,7 这样的数字

java - Spring Boot 服务中的线程

java - 如何在通过java代码运行jmeter时传递自定义属性而不编辑jmx文件

java - LinkedHashMap 到 LinkedHashMap 或 ArrayList 的逆序

java - 何时丢弃 hashmap 内容以避免性能下降?