有时您知道,因为if
,else 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
}
答案 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;
}