Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.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,在过去,我曾与我的一些程序员朋友争论过,他们认为Java中的else-if语句只是语法糖,而使用else-if所做的任何事情都可以使用串行if来完成 但今天我读到了一些我认为可能与之矛盾的东西。以下面的代码为例,其中int x=1 但是通过上面的if语句,你实际上得到的是 Second Condition 否则,如果声明没有通过。因为如果运行了第一个else,那么即使满足条件,也不会有其他的else在它之后运行。所以我的问题。有没有一种方法可以通过串行标准if语句实现这种行为 有没有一种方法可

在过去,我曾与我的一些程序员朋友争论过,他们认为Java中的else-if语句只是语法糖,而使用else-if所做的任何事情都可以使用串行if来完成

但今天我读到了一些我认为可能与之矛盾的东西。以下面的代码为例,其中int x=1

但是通过上面的if语句,你实际上得到的是

Second Condition
否则,如果声明没有通过。因为如果运行了第一个else,那么即使满足条件,也不会有其他的else在它之后运行。所以我的问题。有没有一种方法可以通过串行标准if语句实现这种行为

有没有一种方法可以通过串行标准if语句实现这种行为

有没有一种方法可以通过串行标准if语句实现这种行为

elseif是一个语法糖,但不适用于串行if

相当于:

if (conditionA) {
} else {
    if (conditionB) {
    } else {
        if (conditionC) {}
    }
}
使用elseif结构的主要好处是减少了嵌套,这使代码更具可读性

编辑

正如其他答案所述,在java中,上述内容甚至不是正确的语法糖,尽管有人可能会认为没有大括号的else块本身就是一种语法糖,但也有其他语言,如elsif和elsif,它们都有正确的语法。

else if是一种语法糖,但不适用于系列ifs

相当于:

if (conditionA) {
} else {
    if (conditionB) {
    } else {
        if (conditionC) {}
    }
}
使用elseif结构的主要好处是减少了嵌套,这使代码更具可读性

编辑

正如其他答案所述,在java中,上述内容甚至不是合适的语法糖,尽管有人可能会认为没有大括号的else块本身就是一种语法糖,但还有其他语言,如,对于elsif,有一个适当的语法来表示它。

if语句的一般语法是:

if条件语句

if条件语句1 else语句2

现在来回答你的问题,如果在else if中 是该语句2从常规形式开始的部分。

if语句的常规语法为:

if条件语句

if条件语句1 else语句2

现在来回答你的问题,如果在else if中
是从一般形式开始的陈述。

我部分不同意@Uri Agassi

他说得对,你一般不能重写:

   if (condition1) { System.out.println("First condition"); }
   else if (condition2) { System.out.println("Second condition"); }
   else if (condition3) { System.out.println("Third condition"); }
作为

您可以在条件相互排斥且无副作用的情况下使用,但通常情况下并非如此

如果。。。else没有else,但它需要额外的标志变量;e、 g

   boolean f = false;
   if (condition1) { 
       System.out.println("First condition"); 
       f = true;
   }
   if (!f && condition2) { 
       System.out.println("Second condition"); 
       f = true;
   }
   if (!f && condition3) { 
       System.out.println("Third condition"); 
   }
但我不同意他的说法,他说第一种形式是句法上的糖。。。无论如何。if语句的Java语法规则如下所示:

不短的if元素是为了避免挂起else歧义。这与我的论点无关

通过使用ifthenelstatement或ifthenelstatement作为ifthenelstatement中的语句,我们可以得到else if链接。注意语法中没有提到花括号。花括号之所以出现,是因为语句可以是块;再见

所以根据Java语法的说法,如果。。。否则如果。。。事实上,它只是IFthenstation语法的一种自然形式,而不是一些特殊的语法糖


现在,如果Java假设>>也的话,我部分不同意@uriagassi

他说得对,你一般不能重写:

   if (condition1) { System.out.println("First condition"); }
   else if (condition2) { System.out.println("Second condition"); }
   else if (condition3) { System.out.println("Third condition"); }
作为

您可以在条件相互排斥且无副作用的情况下使用,但通常情况下并非如此

如果。。。else没有else,但它需要额外的标志变量;e、 g

   boolean f = false;
   if (condition1) { 
       System.out.println("First condition"); 
       f = true;
   }
   if (!f && condition2) { 
       System.out.println("Second condition"); 
       f = true;
   }
   if (!f && condition3) { 
       System.out.println("Third condition"); 
   }
但我不同意他的说法,他说第一种形式是句法上的糖。。。无论如何。if语句的Java语法规则如下所示:

不短的if元素是为了避免挂起else歧义。这与我的论点无关

通过使用ifthenelstatement或ifthenelstatement作为ifthenelstatement中的语句,我们可以得到else if链接。注意语法中没有提到花括号。花括号之所以出现,是因为语句可以是块;再见

所以根据Java语法的说法,如果。。。否则如果。。。事实上,它只是IFthenstation语法的一种自然形式,而不是一些特殊的语法糖


现在假设Java>>alsoThere可能是,但是为什么要这样做呢?如果你想要失败,不要把Else放在ifs之前。更好的方法是使用switch..case.@RohitJain-这只是一个学术问题,而不是其他任何问题。在我想象的大多数情况下,我都会继续使用else。哇,所有的反对票到底是怎么回事?我读了规则,这没有违反任何规则。我查了一下其他问题

据我所知,这是一个原创的问题。你的问题总共有0票。有什么问题吗?事实上,有了+3和-3,你就获利了,因为上升票比下降票更重要。我不知道投票被否决的原因,但不是这里的每个人都是这样。可能有,但你为什么要这样做?如果你想失败,不要把其他人放在国际单项体育联合会之前。更好的方法是使用switch..case.@RohitJain-这只是一个学术问题,而不是其他任何问题。在我想象的大多数情况下,我都会继续使用else。哇,所有的反对票到底是怎么回事?我读了规则,这没有违反任何规则。我先检查了其他问题,就我所知,这是原始问题。你的问题总共有0票。有什么问题吗?事实上,有了+3和-3,你就获利了,因为上升票比下降票更重要。我不知道投票被否决的原因,但不是这里的每个人都是这样。@Val:那不一样。如果A和B在区块内发生变化怎么办?切换什么?连续完成的开关盒?@deviantfan怎么不一样?什么改变了?为什么要改变?为什么不一样?@Val:对于if-elseif-elseif-elseif-else,最多只能执行其中一个部分,而与其中的代码无关。在您的代码中,我可以更改ifA部分中的A,以便下一部分也可以执行……等等。@deviantfan还有什么?你可以把printlna一个人留下来修改我的代码。这永远不会打印B和C。然后呢?当然,这两段不同的代码可以独立更改,从而失去连贯性。它是如何使两个具有相同语义的替代实现不同的呢。你如何定义平等?我总是可以这样定义它:你没有完全相同的东西。@Val:那不一样。如果A和B在区块内发生变化怎么办?切换什么?连续完成的开关盒?@deviantfan怎么不一样?什么改变了?为什么要改变?为什么不一样?@Val:对于if-elseif-elseif-elseif-else,最多只能执行其中一个部分,而与其中的代码无关。在您的代码中,我可以更改ifA部分中的A,以便下一部分也可以执行……等等。@deviantfan还有什么?你可以把printlna一个人留下来修改我的代码。这永远不会打印B和C。然后呢?当然,这两段不同的代码可以独立更改,从而失去连贯性。它是如何使两个具有相同语义的替代实现不同的呢。你如何定义平等?我总是可以这样定义它,你没有相同的东西。它不是一个语法糖,大括号只是不需要,当只有一个语句时。它不是语法糖。“elseif”中的“if”启动另一条语句。我想你说的就像是说‘else x=y+1;’是语法上的甜言蜜语。@Val如果你指的是我,我没有攻击任何人,他的回答很好。只是我不同意这里的“语法糖”这个词。它不是一个语法糖,当只有一个语句时,大括号是不需要的。它不是语法糖。“elseif”中的“if”启动另一条语句。我想你说的就像是说‘else x=y+1;’是语法上的甜言蜜语。@Val如果你指的是我,我没有攻击任何人,他的回答很好。只是我不同意这里的“语法糖”这个词。你能添加一个来源吗?否则很难决定谁是对的。因为在不了解Java的深入实现的情况下,您或Uri可能是正确的。源代码是Java语言规范中定义的Java语法。剩下的是逻辑论证。。。source>>我可以添加一个源吗?否则很难决定谁是对的。因为在不了解Java的深入实现的情况下,您或Uri可能是正确的。源代码是Java语言规范中定义的Java语法。剩下的是逻辑论证。。。来源>>我
   if (condition1) { System.out.println("First condition"); }
   if (condition2) { System.out.println("Second condition"); }
   if (condition3) { System.out.println("Third condition"); }
   boolean f = false;
   if (condition1) { 
       System.out.println("First condition"); 
       f = true;
   }
   if (!f && condition2) { 
       System.out.println("Second condition"); 
       f = true;
   }
   if (!f && condition3) { 
       System.out.println("Third condition"); 
   }
IfThenStatement:
    'if' '(' Expression ')' Statement
IfThenElseStatement:
    'if' '(' Expression ')' StatementNoShortIf 'else' Statement
IfThenElseStatementNoShortIf:
    'if' '(' Expression ')' StatementNoShortIf 'else' StatementNoShortIf