java else if多个_关于java:多个else如果条件,以其他“else if”或“else”结束,当逻辑指示最后一个“else”-part只指示一种可能性?...

有时,由于您的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

}

我想你是说else if (x == 0)。

else {明确表示没有留下任何案件。我通常会评论// x > 0,指出此时x的预期值,以防其他条件发生变化。

else { // x > 0

@Rgettman初学者错误。谢谢您。

在您的特定示例中,它们在编译器上是完全相同的,仍然要进行3次检查。第二个例子,从视觉的角度来看,看起来更清晰和完整。else通常用于防止可能的错误或不完整的逻辑/输出。

编译器如何在第二个示例中执行3次检查?

在爪哇中,如果在最后一个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);

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

因此,最好不要包括最后一个条件。将最后一个else if (x > 0)改为简单的else将使程序合法化。

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

那么,你会说,由于这个明确的赋值规则,最好总是用else语句来处理最后一个条件,尽管选项背后有逻辑。我的意思是,代码的一致性很重要,因此使用else是有意义的,即使您没有为尚未实例化的变量赋值。

@是的,Joop一致性很重要。就我个人而言,我的习惯是在这种情况下,用一个没有if的else来结束;额外的代码对我来说似乎是多余的,如果您的编译器没有很好地优化,可能需要几纳秒的时间。:)这就是我用任何语言做事情的方式,甚至那些没有明确的分配规则的语言。从其他答案来看,这似乎是惯例。

在您的情况下,您已经定义了,可以不考虑它,因为只有3种可能性。那就是

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

考虑到一个场景,当最后一个漏洞被打开时,它会为一个漏洞大喊大叫,因为如果所有的if&else if都失败了,它将进入最后一个else,因为它没有界限。

最后一种方法是正确的,因为如果它不是= 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;

}

在您的案例中,将最后一个if进行比较是不理想的,就像前2个if语句不正确一样,那么第三个if语句必须是正确的。所以只保留其他的就可以了。

不过,三元运算符是我个人的选择。

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

基本上是读

if( x>0) then statements

else if(x==0) then statements

else statements

关于三元运算符或if语句的更多信息

三元运算符用于表达式,而不是语句。

比那还要糟。有些语言甚至不允许空块。在bash中,在某些情况下,可以对空语句使用冒号(":")。在python中,你可以说"通过"。

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

我认为代码的清晰性非常重要,编译器在优化条件方面非常聪明。

如果有人能证明一个额外的测试总是失败的,并且它是在每秒执行十亿次的代码中,那么…也许那时。

否则,如果一定要漏掉其他的,你可能会对可能会添加其他"elseifs"的效果发表评论。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值