Else If 逻辑等价

Posted

技术标签:

【中文标题】Else If 逻辑等价【英文标题】:Else If's logical equivalence 【发布时间】:2017-06-08 08:01:12 【问题描述】:

有没有这样的情况:

if (condition) 
    statement
 else 
    if (condition2) 
        statement
     else 
        statement
    

不等于:

if (condition) 
    statement
 else if (condition2) 
    statement
 else 
    statement

如果有案子,我正在努力寻找案子。如果有人知道一个反例,或者如果他们绝对是等价的,您的意见将不胜感激。

【问题讨论】:

不,这两个语句是等价的。 @SarTheFirst 请阅读What should I do when someone answers my question 仅当有人稍后出现并错误地编辑了您缩进不佳的代码时。 【参考方案1】:

您问题中的两个陈述完全相同。也就是说,当您想在再次进入if-else 块之前执行一些常见步骤时,第一个语句更有用。例如:

if (condition) 
    statement
 else 
    perform some common steps.
    if (condition2) 
        statement
     else 
        statement
    

【讨论】:

【参考方案2】:

两个条件结构相等。

在第一种情况下,您有更多选项,例如您可以执行一些代码,以防第二个 if 或 else 变为 true,该块必须执行。

if (condition1) 
    ...
 else 
    ...
    if (condition2) 
        ...
     else 
        ...
    
    ...

但第一个更容易阅读。

您也可以选择使用更高效的开关。

【讨论】:

是不是因为处理器的工作方式,第一个效率低于第二个?【参考方案3】:

不,它们总是完全等价的。

它们完全相同的原因是第一个示例中块中的唯一语句是if 语句;所以删除块根本不会改变语义,因为它只是包装一个没有任何变量声明等的语句。

对比:

if (condition) 
    statement
 else 
    String foo = "bar";
    if (condition2) 
        statement
     else 
        statement
    

现在,除了您版本中的单个 if 之外,该块还在做一些事情,因此事情发生了分歧。

但由于您的版本除了if 之外没有任何内容,它们完全相同。

【讨论】:

【参考方案4】:

else 后面的括号是不必要的,因为在那之后有一条指令(第二条 if),所以除非你之后出于某种原因解析 java 文件,否则它们在任何情况下都不应该有所不同

【讨论】:

【参考方案5】:

条件为真或假。只有四个选项四个两个条件。 在这两种情况下,将执行三个语句中的一个,并且在两种情况下都是相同的,因为您可以尝试使用所有四个选项。 因此,即使该语句会对条件产生影响,这也不会产生影响。因此我敢打赌它是等价的。

【讨论】:

以上是关于Else If 逻辑等价的主要内容,如果未能解决你的问题,请参考以下文章

在c语言里,if (x)等价于if (x!=0)、if (!x)等价于if (x==0)吗?

ifelse语句if条件可以为空吗

打破简写的if语句[重复]

JS中使用逻辑 AND/OR 做条件判断及函数默认值

机器学习—逻辑回归LR

使用位运算符,找到一个逻辑不等价