在Java中,这被认为是“嵌套IF语句”的一个例子吗?

时间:2010-09-03 20:03:07

标签: java nested if-statement

在这里,我们有一个长期的假设,需要在脑海中清除。以下是嵌套'if'语句的示例:

if (...)
  ...;
else if (...)
  ...;

我的印象是嵌套需要一个'if'在另一个'if'里面,就像这样:

if (...)
  if (...)
    ...;
当你在其他内部嵌套时,

或至少明确区分范围,如下:

if (...)
  ...;
else { //if the next statement didn't 
       //exist, then the curly brace changes nothing?
  ...;
  if (...)
    ...;
}

这可以归结为编译器如何解释事物,是否将else-ifs中的'if'视为与父if的相同级别,或者它们是否创建“new”'if'语句。谢谢你的时间!

编辑:我问,因为我是java实验室的TA,当天的主题是嵌套-ifs。最后,我发现老师认为我的第一个例子对“嵌套if语句”有效。

12 个答案:

答案 0 :(得分:20)

当然它是嵌套的。嵌套与格式化代码的方式无关。

if (...)
{
    // some code
}
else if (...)
{
    // some code
}
else
{
    // some code
}

完全等同于

if (...)
{
    // some code
}
else
{
    if (...)
    {
        // some code
    }
    else
    {
        // some code
    }
}

Java中没有'else if'关键字,这种效果完全是通过一种格式化约定来实现的,该约定可以阻止嵌套的长链在屏幕上漂移。

如果有人需要说服,这里是if语句的规范:Java Language Specification section 14.9

答案 1 :(得分:12)

这是 if语句

if (condition1) {
    // ...
}

这是嵌套if语句

if (condition1) {
    // ...
    if (condition2) {
        // ...
    }
    // ...
}

这是 if-else语句

if (condition1) {
    // ...
} else {
    // ...
}

这是链式if-else语句

if (condition1) {
    // ...
} else if (condition2) {
    // ...
}

答案 2 :(得分:7)

嵌套if是这样的:

if (...)
  if (...)
    ...;

您提供的第一个示例仅为if/else

记住它的一个好方法是缩进因嵌套if而增加,但if/else却没有。

答案 3 :(得分:4)

从概念上讲,对我来说是第一种形式

if (cond1)
{
}
else if (cond2)
{
}
else
{
}

未嵌套,因为所有条件都在相同的逻辑级别进行评估。换句话说,我把它读作“基于cond1分支行动:cond2:其他任何东西”。

if (cond1){ 
   if (cond2){ 
     if (cond3){ 

是嵌套的,因为您在其他条件下评估了条件,即在先前条件下依赖。如果你想要它的文字,第二种情况下cond2的范围实际上嵌套在cond1的范围内。第一种形式并非如此。

我从没想过这是有争议的。

编辑:如果您曾经阅读过像this这样的代码,那么差异似乎就不那么有用了。

答案 4 :(得分:2)

我会假设所有三个嵌套ifs。由于对其他案件达成了一致意见,我将集中讨论你的第一个案件:

从我的观点来看,此代码是嵌套的,因为单个if就像

if(...) { } else { }

else部分是可选的。而且你已经有效地将if嵌入到外部if else的else部分中,即使格式化(也许是语义)表明它不同。

但实际上它归结为“嵌套if”的确切定义,我认为没有普遍接受的定义。

你为什么这么问? 如果这是关于代码效率的问题,那么这并不完全取决于嵌套级别。 如果这是由于关于嵌套级别的一些指导原则,那么指南应该明确它是如何定义“嵌套if”。

答案 5 :(得分:2)

我不认为第一种形式(if / else if / etcetera)是“嵌套”的。相反,它更类似于开关块,我也不认为它是嵌套的。

答案 6 :(得分:1)

我理解的方式和你一样。

如果实现秘密地只支持“if”和“else”关键字,我想你可以认为“else if”中的“if”是嵌套在“else”语句中的if语句。但我不认为这件事情那么重要。在这种情况下,“else”的范围仅包含“if”,因此它有效地表现为单个范围。

这是一种温和的好奇心,还是你遇到了范围问题?

答案 7 :(得分:0)

你可以在不声明其他情况下嵌套if,这似乎是你的困惑。

答案 8 :(得分:0)

声明实际上以不规则形式嵌套的示例。

您拥有的表格是:

if(statement1 == true)
   code1...;
else if (statement2 == true)
   code2...;

这相当于以下内容:

if (statement1 == false)
   if (statement2 == true)
      code2...;
else
   code1;

但是,我认为以这种形式嵌套是一种糟糕的编程习惯。您应该能够重新排列代码以适应更传统的形式。

答案 9 :(得分:0)

如果它被放置在另一个if块内,则它是嵌套的if。第一种情况是if-else声明。

答案 10 :(得分:0)

在施工中

if (...)
  ...
else {
  if (...)
    ...
}

else标识隐式 if 如果前提是假

if范围内嵌套else,在我看来,语义上可以作为嵌套if语句。

答案 11 :(得分:0)

嵌套if语句是否意味着: 在if条件中放置另一个if条件