Java If和else简化
我有一个很长的if和else语句,你知道如何缩短它吗 还是这将是我处理这件事的唯一方法Java If和else简化,java,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
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;
}
if(HR<41){
HR_得分=2;
}否则如果(HR<51){
HR_得分=1;
}否则如果(HR<101){
HR_得分=0;
}否则如果(HR<111){
HR_得分=1;
}否则如果(HR<129){
HR_得分=2;
}否则{
HR_得分=3分;
}
如果真的只有这六种可能性,那么If
/else
就可以了,我不希望任何替代方案更清晰
我会坚持使用if
/else
一个不好的替代方案示例:-)
如果HR
的范围相对较窄,则可以使用查找表
private static final int[] scores = {2, 2, 2, 2, 2, /*...*/ 1, /*...*/ 0, /*...*/};
然后,当您需要分数时:
if (HR >= 0 && HR < scores.length) {
HR_Score = scores[HR];
}
然后
for (int[] entry : scoreLookup) {
if (HR < entry[0]) {
HR_Score = entry[1];
break;
}
}
for(int[]条目:scoreLookup){
如果(HR
…但我仍然希望您的如果
/否则
您可以使用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();
//在类中
private static final NavigableMap map=new TreeMap();
地图.put(41,2);
地图.put(51,1);
map.put(101,0);
地图.put(111,1);
普特地图(129,2);
map.put(Integer.MAX_值,3);
//当你需要分数的时候
HR_Score=map.ceilingEntry(HR.getValue();
编辑
我建议用这个。把这个放在这里是因为它提供了一种获得相同结果的替代方法
您可以使用带有由键定义的整数的排序映射
因为您有一个提前退出策略,所以只有在前面的测试失败时,值才能出现,我们可以在循环中提前返回
映射成对存在,一个键和一个值。您可以迭代这些键值集,然后将该条目集用作比较函数
我使用下面的TreeMap作为实现,因为这样我们可以相对确定排序顺序是插入顺序
现场观看:
import java.util.*;
导入java.lang.*;
导入java.io.*;
表意文字
{
公共静态void main(字符串[]args)引发java.lang.Exception
{
Ideone=新Ideone();
System.out.println(“41:2=“+1.getScore(41));
System.out.println(“50:1=“+1.getScore(50));
System.out.println(“101:0=“+1.getScore(101));
System.out.println(“110:1=“+1.getScore(110));
System.out.println(“128:2=“+1.getScore(128));
System.out.println(“200:3=“+1.getScore(200));
}
private SortedMap pairList=null;
公共分类地图getPairList(){
if(pairList==null){
pairList=newtreemap();
pairList.put(42,2);
pairList.put(51,1);
pairList.put(101,0);
pairList.put(111,1);
pairList.put(129,2);
}
返回成对列表;
}
公共整数getScore(整数比较){
for(Map.Entry:this.getPairList().entrySet()){
整数key=entry.getKey();
如果(比较<键){
返回条目.getValue();
}
}
返回3;
}
}
作为一个无关的评论:我建议你远离“魔法数字”/“硬编码数字”。试着看看是否可以将它们放在设置文件或数据库中,然后从那里加载它们。
这将使您的应用程序更经得起未来的考验,更易于更改值,而无需重新编译和重新部署。您可以使用?:代码>运算符以缩短代码:
int HR_Score = HR < 41 ? 2 :
(HR < 51) ? 1 :
(HR < 101) ? 0 :
(HR < 111) ? 1 :
(HR < 129) ? 2 :
3;
int HR\u分数=HR<41?2 :
(HR<51)?1 :
(HR<101)?0 :
(HR<111)?1 :
(HR<129)?2 :
3.
条件运算符(也称为“三元”,因为它需要三个操作数)是链接您不想嵌套的if/else语句的一种方便方法 您还可以查看我的解决方案版本
//solution1:
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;
//solution2:
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;
//no branch solution.
HR_Score = 3 - (HR < 129)
- (HR < 111)
- (HR < 101)
+ (HR < 51)
+ (HR < 41);
//解决方案1:
如果(HR<41)HR_得分=2;
否则,如果(HR<51)HR_得分=1;
如果(HR<101)HR_得分=0,则为其他情况;
如果(HR<111)HR_得分=1,则为其他情况;
否则,如果(HR<129)HR_得分=2;
其他HR_分数=3;
//解决方案2:
如果(HR<41)HR_得分=2;其他的
如果(HR<51)HR_得分=1;其他的
如果(HR<101)HR_得分=0;其他的
如果(HR<111)HR_得分=1;其他的
如果(HR<129)HR_得分=2;其他的
HR_得分=3分;
//没有分支解决方案。
HR_得分=3-(HR<129)
-(HR<111)
-(心率<101)
+(HR<51)
+(HR<41);
是HR
anint
?这就是整个问题,还是它会持续更长的时间,而你为了这个问题缩短了它?是的,人力资源是一个非常重要的问题。我还偷偷问了一个你可能还没看到的问题我想知道对于SO的格式来说,这是否过于基于观点。这很难看,但你正在做的事情非常清楚-任何人都可以在几秒钟内理解它-用一个有意义的名称将其包装在一个方法中,然后继续。我不知道下一个java版本中的新模式匹配是否会以case(x<41)的形式支持这一点打破2,但如果它能或更好的话那就太好了:案例(x<41)->2
@Eugene:是的,如果他们能让它足够简洁的话。在JavaScript中,大小写标签可以是表达式,它们可以按顺序进行测试,因此您可以在JavaScript中使用开关,但是开关非常冗长,通常与if
/elseif
/else
比上述内容更清楚,但这至少是一个可行的替代方案,与其他几个答案不同。我喜欢这个答案。我发现这个答案比标准if/els更令人困惑
int HR_Score = HR < 41 ? 2 :
(HR < 51) ? 1 :
(HR < 101) ? 0 :
(HR < 111) ? 1 :
(HR < 129) ? 2 :
3;
//solution1:
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;
//solution2:
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;
//no branch solution.
HR_Score = 3 - (HR < 129)
- (HR < 111)
- (HR < 101)
+ (HR < 51)
+ (HR < 41);