如果还有其他方法,是否有更有效的方式写多个?

L C*_*L C -14 java if-statement range code-duplication

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

if (90 < avg && avg < 100) {
     return 'A';
} 
Run Code Online (Sandbox Code Playgroud)

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

这是很多重复,并且我要匹配的范围具有相同的长度。

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

Arn*_*del 6

我喜欢使用enum来解决此类问题。

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

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();
    }

}
Run Code Online (Sandbox Code Playgroud)