首页 > 解决方案 > 有没有更有效的方法来编写多个 if else?

问题描述

我需要将平均分数与字母等级相匹配。这意味着

if (90 < avg && avg < 100) {
     return 'A';
} 

依此类推,直到 'F',带有 5 个 if-else 语句。

这是很多重复,我匹配的范围是相同的长度。

有没有更有效的方法来做到这一点?我不想重复 if-else 语句 5 次。

标签: javaif-statementrangecode-duplication

解决方案


我喜欢用 anenum来解决这类问题。

您只需在枚举值中定义范围并使用谓词。

import java.util.*;

public class MyClass {
    public static void main(String args[]) {
      System.out.println(Letter.getValue(13)); // B
      System.out.println(Letter.getValue(28)); // C
      System.out.println(Letter.getValue(43)); // empty
    }
}

enum Letter {

    A(1, 10), B(11, 20), C(21, 30);

    int min;
    int max;

    Letter (int min, int max) {
        this.min = min;
        this.max = max;
    }

    boolean inRange(int v) {
        return v >= min && v <= max;
    }

    static Optional<Letter> getValue(int i) {
        return Arrays.stream(values())
           .filter(v -> v.inRange(i))
           .findAny();
    }

}

推荐阅读