不完全是如何表达标题,但一般问题是比较这两个代码块。第一个是原来的,第二个是替代它的。
这实际上提高了代码的效率还是仅仅提高了可读性?我不相信它们在功能上有什么不同,除非我遗漏了一些东西。
第一:
if(stl1YVal < stl2YVal){
return -1;
}else if(stl1YVal > stl2YVal){
return 1;
}else{
if(stl1XVal < stl2XVal){
return -1;
}else if(stl1XVal > stl2XVal){
return 1;
}else{
return 0;
}
}
第二次:
if(stl1YVal < stl2YVal || stl1XVal < stl2XVal){
return -1;
}else if(stl1YVal > stl2YVal || stl1XVal > stl2XVal){
return 1;
}else {
return 0;
}
编辑:我将整个方法放入其中,以便它对人们更有意义......如果人们有答案/解决方案以使其更具可读性和功能性(因为似乎第二个方法并不等效)我们将不胜感激。
(由于文本行简单,它们被命名为 STL - 我没有命名它们)
public int compare(SimpleTextLine stl1, SimpleTextLine stl2){
//0 -> stl1 and stl2 are equivalent, maintain current order
//-1 -> stl1 comes before stl2
//1 -> stl2 comes before stl1
float stl1XVal = Math.round(stl1.getxLinePos());
float stl1YVal = Math.round(stl1.getyLinePos());
float stl2XVal = Math.round(stl2.getxLinePos());
float stl2YVal = Math.round(stl2.getyLinePos());
if(stl1YVal < stl2YVal){
return -1;
}else if(stl1YVal > stl2YVal){
return 1;
}else{
if(stl1XVal < stl2XVal){
return -1;
}else if(stl1XVal > stl2XVal){
return 1;
}else{
return 0;
}
}
}
最佳答案
我认为原始代码的“更干净”版本是其中之一:
// Option 1 (eliminating redundant 'else' clauses and nesting)
if (stl1YVal < stl2YVal)
return -1;
if (stl1YVal > stl2YVal)
return 1;
if (stl1XVal < stl2XVal)
return -1;
if (stl1XVal > stl2XVal)
return 1;
return 0;
// Option 2 (using conditional ternary operator)
return (stl1YVal < stl2YVal ? -1 :
stl1YVal > stl2YVal ? 1 :
stl1XVal < stl2XVal ? -1 :
stl1XVal > stl2XVal ? 1 : 0);
我认为选项 2 很棒。选项 1 是否需要大括号 ({}
) 取决于您的编码标准。
关于java - if、else if、else 语句的功能性和可读性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42305765/