Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 多个else if条件,以“其他”结束;否则,如果;或;否则";当逻辑决定最后一个“时”;否则"-第二部分只规定了一种可能性?_Java_If Statement - Fatal编程技术网

Java 多个else if条件,以“其他”结束;否则,如果;或;否则";当逻辑决定最后一个“时”;否则"-第二部分只规定了一种可能性?

Java 多个else if条件,以“其他”结束;否则,如果;或;否则";当逻辑决定最后一个“时”;否则"-第二部分只规定了一种可能性?,java,if-statement,Java,If Statement,有时,由于if,else-if中的条件背后的逻辑,您知道可以忽略上一个条件检查,并将其写成else。这样你就少做一次检查,但是它不太清晰。什么是好的编码?因为少了一次检查,或者编译器针对这些情况进行了优化,这样会更有效吗 if(x<0){ //statements }else if(x==0){ //statements }else if(x>0){ //statements } if(x0){ //声明 } 还是和其他人一起 if(x<0){ //stat

有时,由于
if
else-if
中的条件背后的逻辑,您知道可以忽略上一个条件检查,并将其写成
else
。这样你就少做一次检查,但是它不太清晰。什么是好的编码?因为少了一次检查,或者编译器针对这些情况进行了优化,这样会更有效吗

if(x<0){
  //statements
}else if(x==0){
  //statements
}else if(x>0){
  //statements
}
if(x0){
//声明
}
还是和其他人一起

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

如果(x在您的案例中,您已经定义了它,那么可以省略它,因为只有3种可能性。

就是

x==0 or x<0 or x>0
x==0或x0

考虑到一个更可能的场景,当最后一个else是开放式的时,它会请求一个bug,因为如果所有if和else if都失败,它将进入最后一个else,因为它没有边界。

甚至比这更糟糕。某些语言甚至不允许空块。在Bash中,在某些情况下,您可以使用冒号(“:”)对于空语句。在Python中可以说“pass”

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

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

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


否则,如果必须省略else,则可能会添加一条注释,大意是可能会添加其他“elseif”。

在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(x<0){
//声明
whatIsX=“x为负”;
}else如果(x==0){
//声明
whatIsX=“x为零”;
}如果(x>0),则为else{
//声明
whatIsX=“x为正”;
}
系统输出打印LN(whatIsX);
这将给您一个错误。原因是编译器认为如果
if
条件都不为真,那么
whatIsX
可能没有初始化。我们知道这是不可能的,因为其中一个
if
条件必须为真(假设
x
不能在错误的时间被另一个线程更改!)但语言规则不要求编译器尝试进行必要的分析来解决这个问题

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


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

在您的例子中,比较最后一个if并不理想,就像前两个if语句不正确一样,那么第三个if语句必须正确。所以只保留else就可以了

三元运算符将是我个人的选择

(x>0) ? //statements : (x==0) ? //statements : //statements
它基本上是这样写的

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

关于三元运算符或if语句的更多信息最后一种方法是正确的,因为如果它不是
=0
<0
,则它必须是
>0
,并且不排除其他可能性

在一个方面,你也可以考虑使用一个开关语句

    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;
    }
intx=3;
开关(x){
病例1:x<0;
//某物;
打破
案例2:x==0;
//某物;
打破
病例3:x>0;
//某物;
打破
默认:中断;
}

如果(x==0),我想你的意思是
else
else{
清楚地说明没有任何大小写被遗漏。我通常会注释
//x>0
以指示此时x的预期值,以防其他条件发生变化。@rgetman初学者错误。谢谢。在您的特定示例中,它们完全相同,编译器仍会执行3次检查。第二个示例来自vi一般的观点,看起来更干净、完整。
else
通常用于防止可能的错误或不完整的逻辑/输出。在第二个示例中,编译器怎么可能进行3次检查?嗯,三元运算符处理表达式,而不是语句。因此,您会说,由于这种明确的赋值规则,最好使用alwa吗ys不考虑选项背后的逻辑,用else语句执行最后一个条件?我的意思是代码的一致性很重要,因此使用
else
是有意义的,即使您没有为尚未实例化的变量赋值。@Joop一致性很重要,是的。就我个人而言,我的习惯是用
else
在这种情况下,如果没有
if
,额外的代码对我来说似乎是多余的,如果你的编译器没有很好地优化,它可能会花费几纳秒。:)这就是我在任何语言中做事情的方式,即使是那些没有明确赋值规则的语言。从其他答案来看,这似乎是通常的做法。