多个其他条件,当逻辑指示最后的“其他” - 部分只指示一种可能性时,以另一个“else if”或“else”结束?

时间:2014-11-13 17:20:41

标签: java if-statement

有时您知道,因为ifelse if条件背后的逻辑,您的上一次条件检查可以省略,而是写为else。这样你可以少做一次检查,但阅读不太清楚。什么是好的编码?它会更有效率,因为只有少一点检查或编译器是否针对这些情况进行了优化?

if(x<0){
  //statements
}else if(x==0){
  //statements
}else if(x>0){
  //statements
}

或与其他

if(x<0){
  //statements
}else if(x==0){
  //statements
}else{
  //statements
}

5 个答案:

答案 0 :(得分:3)

在Java中,如果在最后else if上包含条件,则存在潜在问题:

String whatIsX;
if (x < 0) {
   // statements
   whatIsX = "x is negative";
} else if (x == 0) {
   // statements
   whatIsX = "x is zero";
} else if (x > 0) {
   // statements 
   whatIsX = "x is positive";
}
System.out.println(whatIsX);

这会给你一个错误。原因是如果whatIsX条件都不成立,编译器认为它可能没有被初始化if我们知道这是不可能的,因为其中一个if条件必须为真(假设x无法被另一个线程更改为错误时间!)。但语言规则并不要求编译器尝试进行必要的分析来解决这个问题。

因此,包含最后一个条件的是最好的。将上一个else if (x > 0)更改为简单else将使该计划合法化。

这是Java的一个特性,因为它具有明确的任务和#34;规则。该代码在大多数其他语言中都可以正常工作。

答案 1 :(得分:2)

在你的情况下,你已经定义了可以将其遗漏,因为只有3种可能性。
那是

x==0 or x<0 or x>0

考虑到一个具有更多可能性的场景,当最后一个是开放式结束时,它会因为一个错误而哭泣,如果所有的if和&amp;否则,如果失败,它将进入最后一个,因为它没有界限。

答案 2 :(得分:1)

它甚至比那更糟糕。有些语言甚至不允许空块。在Bash中,在某些情况下,您可以使用冒号(&#39;:&#39;)作为空语句。在Python中,您可以说&#39;传递&#39;。

在这里,我们甚至不考虑强制包含1个语句块的问题。

我认为代码的清晰度非常很重要,编译器非常聪明地优化条件。

如果有人能够证明额外的测试总是会失败并且代码每秒执行十亿次,那么......也许就是这样。

否则,如果一个人必须遗漏其他人,那么可以评论一下其他人的注意事项&#39; elseifs&#39;很可能会被添加。

答案 3 :(得分:1)

在你的情况下,比较最后一个if并不理想,好像第一个2 if语句不正确,那么第三个必须为true。所以保持其他就行了。

然而,三元运算符将是我个人的选择。

(x>0) ? //statements : (x==0) ? //statements : //statements

它基本上是

if( x>0) then statements 
else if(x==0) then statements 
else statements

有关三元运算符或if语句here

的更多信息

答案 4 :(得分:1)

最后一种方法是正确的,因为如果它不是= 0< 0那么它必须是> 0,而且不会遗漏任何其他可能性。

另一方面,您也可以考虑使用switch语句

    int x = 3;
    switch(x) {
       case 1:  x < 0;
               //something;
                 break;
        case 2:  x == 0;
                 //something;  
                 break;
        case 3:  x > 0;
                 //something;
                 break;
        default: break;
    }