Java If和其他简化

Jac*_*ers 0 java

我有这个非常长的if和else声明,任何想法我怎么能缩短这个?

或者这是我处理这个问题的唯一方法吗?

if (HR < 41) {
    HR_Score = 2;
} else if (HR < 51) {
    HR_Score = 1;
} else if (HR < 101) {
    HR_Score = 0;
} else if (HR < 111) {
    HR_Score = 1;
} else if (HR < 129) {
    HR_Score = 2;
} else {
    HR_Score = 3;
}
Run Code Online (Sandbox Code Playgroud)

sta*_*tut 8

您可以使用NavigableMap解决您的问题.例如:

// In the class
private static final NavigableMap<Integer, Integer> map = new TreeMap<>();
map.put(41, 2);
map.put(51, 1);
map.put(101, 0);
map.put(111, 1);
map.put(129, 2);
map.put(Integer.MAX_VALUE, 3);

// When you need a score
HR_Score = map.ceilingEntry(HR).getValue();
Run Code Online (Sandbox Code Playgroud)

  • 这是一个非常酷的解决方案.我今天学到了一件事. (2认同)
  • 虽然我仍然发现`if` /`else`比上面更清楚,但这至少是一个可行的选择,不像其他几个答案. (2认同)

小智 5

您可以使用? :运算符使代码更短:

int HR_Score = HR < 41   ? 2 : 
              (HR < 51)  ? 1 : 
              (HR < 101) ? 0 : 
              (HR < 111) ? 1 : 
              (HR < 129) ? 2 :
                           3;
Run Code Online (Sandbox Code Playgroud)

条件运算符(又名“三元”,因为它需要三个操作数)是链接您不想嵌套的 if/else 语句的便捷方式。

  • 我发现这个比标准的 if/else 方法更令人困惑,特别是对于那些不习惯条件运算符的人。链接多个条件运算符很容易混淆它们,并且代码的可维护性会降低。 (2认同)