【问题标题】:How to determine which if statement the else belongs to? [closed]如何确定 else 属于哪个 if 语句? [关闭]
【发布时间】:2015-01-19 09:04:42
【问题描述】:

我写了下面的代码,把自己弄糊涂了。

if(condition1)
    if(condition2){
        doStuff()
    }
else {
    doOtherStuff();
}

当它像这样缩进时,看起来 else 属于条件 1 if。但是如果我们改变一些空格,它看起来就像是 condition2 的一部分:

if(condition1)
    if(condition2){
        doStuff()
    } else {
        doOtherStuff();
    }

那么它属于哪个?为了更清楚,我把条件1放在括号里,但是哪个是正确的?

【问题讨论】:

  • 在两个(全部)if 上都使用显式大括号
  • 不要避免可选的大括号
  • 一般的经验法则是这样。else总是属于封闭的if(最近的if)
  • 在问世人之前尝试一下有多难?
  • 如果您有 IDE,它会为您缩进代码以使嵌套更明显。

标签: java if-statement semantics


【解决方案1】:

属于condition2if语句。

这样做的原因是,由于您的 condition1 if 语句 用括号 ({}) 包裹它的主体,因此假定它的主体包含 一个单一的声明。查看 condition2 if 语句(包括 else),它是一个有效的 (if/else) 语句,因此它被视为一个整体。

如果要使else 属于外部if,则必须将第一个的正文括在括号中。

if (condition1) {
    if (condition2) {

    }
} else {
   doOtherStuff();
}

一般来说,总是用括号 ({}) 包裹条件结构和循环的主体(即使它们包含单个嵌套语句)是一种很好的做法,因为代码变得更具可读性和可维护。

【讨论】:

    【解决方案2】:

    它属于condition2。如果你想把它归属于condition1,你必须使用括号

    if(condition1) {
        if(condition2){
            doStuff()
        }
    } else {
        doOtherStuff();
    }
    

    【讨论】:

      【解决方案3】:

      你是对的,它与最后一个 if 相匹配,即你的内在 if。如果您希望 else 部分与外部 if 相关联,则应明确使用大括号,例如:

      if(condition1) {
          if(condition2){
              doStuff()
          } 
      } else {
          doOtherStuff();
      }
      

      【讨论】:

        猜你喜欢
        • 2016-10-15
        • 1970-01-01
        • 2017-09-05
        • 2017-08-29
        • 2018-03-29
        • 2022-06-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多