在 Java 中,这是不是被视为“嵌套 IF 语句”的示例?
Posted
技术标签:
【中文标题】在 Java 中,这是不是被视为“嵌套 IF 语句”的示例?【英文标题】:In Java, is this considered an example of a "nested IF statement"?在 Java 中,这是否被视为“嵌套 IF 语句”的示例? 【发布时间】:2011-04-08 01:00:30 【问题描述】:在这里,我们有一个长期存在的假设,需要在我的脑海中澄清。以下是嵌套“if”语句的示例:
if (...)
...;
else if (...)
...;
我的印象是嵌套需要一个“if”在另一个“if”中,就像这样:
if (...)
if (...)
...;
或者当你嵌套在一个 else 中时,至少有一个明确的范围分离,就像这样:
if (...)
...;
else //if the next statement didn't
//exist, then the curly brace changes nothing?
...;
if (...)
...;
这可能归结为编译器如何解释事物,else-if 中的“if”是否被认为与父 if 处于同一级别,或者它们是否创建“新”“if”语句。感谢您的宝贵时间!
edit:我问是因为我是java实验室的TA,当天的主题是nested-ifs。最后,我发现老师认为我的第一个例子对于“嵌套 if 语句”是有效的。
【问题讨论】:
我想一般来说你可以说,nested的意思是inside。 嵌套在什么意义上?我认为没有 ISO 定义。从可读性的角度嵌套?编译器解析?只是在里面? 我会说这几乎与语言无关。 恕我直言,您的老师弄错了。我相信他可能对“嵌套”这个词的含义有些困惑。 如果老师的意图仅限于识别结构,我可以看出他们是错误的。但在语义上,我同意老师的观点——它是嵌套的。 “else”范围与其“if”范围具有相同的状态(功能和重要性)。 【参考方案1】:当然是嵌套的。嵌套与您格式化代码的方式无关。
if (...)
// some code
else if (...)
// some code
else
// some code
完全等价于
if (...)
// some code
else
if (...)
// some code
else
// some code
Java 中没有“else if”关键字,其效果纯粹是通过一种格式约定来实现的,该约定可以阻止长链嵌套 else 在屏幕上漂移。
如果有人需要说服,这里是 if 语句的规范:Java Language Specification section 14.9
【讨论】:
感谢那里的额外“当然”,好像对此有明确的共识(其他评论员不同意你) @swajak 其他评论员错了,这是正确的。然而,由于“嵌套”实际上只是概念上的一个问题,因此以这种方式布局它并没有与另一种方式相同的概念负担,因此实际上它不会像嵌套那样增加心理复杂性。 我写了一个类似的答案,但@JeremyP 准确地捕捉到了我的想法 [甚至是“当然 :-)]。就“编译器如何解释事物”而言,else if
不是Java 语言语法的一部分就像在其他一些语言中一样。因此,我会说嵌套-if
是 then
-block 或另一个 @987654329 的 else
-block 中的任何 if
语句@ 语句。Java 代码中else if
的使用实际上是嵌套的-if
作为 else 代码块的唯一语句嵌入。
不知何故,我从来没有这样想过else if
。不过既然你这么说,那就很有道理了。
这是我们在学校所教的内容。【参考方案2】:
这是一个if语句:
if (condition1)
// ...
这是一个嵌套的 if 语句:
if (condition1)
// ...
if (condition2)
// ...
// ...
这是一个if-else 语句:
if (condition1)
// ...
else
// ...
这是一个链式 if-else 语句:
if (condition1)
// ...
else if (condition2)
// ...
【讨论】:
取决于else
是否包含任何逻辑。外部是if-else
语句,内部是嵌套的if
语句。如果else
不包含任何逻辑(因此您可以省略else
的大括号),那么它就变成了一个链式if-else
语句。【参考方案3】:
嵌套的 if 是这样的:
if (...)
if (...)
...;
你给出的第一个例子就是if/else
。
记住它的一个好方法是缩进随着嵌套的if
而增加,但对于if/else
它不会。
【讨论】:
+1 同意这一点。另一个是一个else if,这是一个嵌套的if。 第一个块中的第二个if不是else块的语句吗?如果 (...) ...;否则 \n 如果 (...) ...;被您的回答视为嵌套 if? @Jacob Tomaw - 好问题。在原始意义上,嵌套意味着内部,正如 Felix King 在 cmets 中对 OP 的问题所指出的那样。我会认为他的第三个示例中的 else 中的代码不是第一个 if 语句中的嵌套 if,相反,我只会认为它是 if/else,而 else 里面有更多的逻辑。我不会认为 else 部分中的 if 是第一个 if 语句中的嵌套 if。 这是不正确的。第二个 if 实际上嵌套在第一个的 else 中——这就是嵌套(在 if 和 else 子句周围使用大括号自己查看)。 @Bill K - 那么你是对我的评论还是我的回答投了反对票(假设反对票来自你)?我从未在我的回答中评论过第三个例子。无论如何,在阅读您的 cmets 之后,我倾向于同意您的论点。【参考方案4】:从概念上讲,对我来说是第一种形式
if (cond1)
else if (cond2)
else
不是嵌套的,因为所有条件都在同一逻辑级别进行评估。换句话说,我将其读作“基于 cond1:cond2:anything else 分支你的操作”。
if (cond1)
if (cond2)
if (cond3)
是嵌套的,因为您在其他条件中评估了条件,也就是说,依赖之前的条件。如果你想从字面上看,第二种情况下 cond2 的范围实际上嵌套在 cond1 的范围内。这在第一种形式中是不正确的。
我从没想过这是有争议的。
编辑:如果你曾经读过像this 这样的代码,那么差异可能看起来不那么学术。
【讨论】:
【参考方案5】:我会假设所有三个嵌套的 if。由于对其他情况达成了普遍共识,因此我专注于您的第一个情况:
从我的角度来看,这段代码是一个嵌套的 if,因为单个 if
类似于
if(...) else
else
部分是可选的。而且你已经有效地将 if 嵌套到外部 if else
的 else 部分,即使格式(可能是语义)暗示它不同。
但实际上归结为“嵌套if”的确切定义,我认为没有一个普遍接受的定义。
你为什么这么问? 如果这与代码效率有关,那么这不仅仅取决于嵌套级别。 如果这是由于一些关于 if 嵌套级别的准则,那么该准则应该明确它如何准确定义“嵌套 if”。
【讨论】:
我是一个java实验室的TA,今天的主题是nested-ifs。最后,我发现老师认为我的第一个例子对于“嵌套 if 语句”是有效的。【参考方案6】:我不认为第一种形式(if/else if/etcetera)是“嵌套的”。相反,它更类似于 switch 块,我也不认为它是嵌套的。
【讨论】:
【参考方案7】:我和你一样理解。
如果实现秘密只支持“if”和“else”关键字,我想你可以认为“else if”中的“if”是嵌套在“else”语句中的if语句。但我不认为这很重要。在这种情况下,“else”的作用域仅包含“if”,因此它有效地表现为单个作用域。
这是轻微的好奇心,还是您遇到了范围界定问题?
【讨论】:
我是一个java实验室的TA,今天的主题是nested-ifs。最后,我发现老师认为我的第一个例子对于“嵌套 if 语句”是有效的。 这很奇怪,听起来像是概念上的歧义。现在我也得去问问我的教授。这会吞噬我的大脑! :P "如果实现秘密地只支持 "if" 和 "else" 关键字" -- 这不是秘密,这正是大多数主要语言中的内容(值得注意的例外是 perl)。始终编写else if
而不是将 if
嵌套在 else
中纯粹是一种风格选择。【参考方案8】:
你可以嵌套一个 if 而不声明一个 else,这似乎是你的困惑。
【讨论】:
Java 中没有 else-if 这样的关键字。【参考方案9】:该语句实际上是以不规则形式嵌套的一个示例。
你的表格是:
if(statement1 == true)
code1...;
else if (statement2 == true)
code2...;
这等价于:
if (statement1 == false)
if (statement2 == true)
code2...;
else
code1;
但是,我认为以这种形式嵌套是一种糟糕的编程习惯。您应该能够重新排列代码以适应更传统的形式。
【讨论】:
【参考方案10】:如果它被放置在另一个 if
块中,则它是一个嵌套的 if
。第一种情况是if-else
语句。
【讨论】:
【参考方案11】:在建设中
if (...)
...
else
if (...)
...
else
标识一个隐含的if:if the antecedent is false。
将if
嵌套在else
范围内,那么在我看来,在语义上符合嵌套if
语句的条件。
【讨论】:
【参考方案12】:嵌套if语句的意思是: 在 if 条件中放置另一个 if 条件
【讨论】:
您需要提供更多详细信息,例如示例等 这道题8年了,所有的细节都被时间遗忘了。 真的吗?您阅读了有关此问题的所有其他答案并认为缺少此信息?以上是关于在 Java 中,这是不是被视为“嵌套 IF 语句”的示例?的主要内容,如果未能解决你的问题,请参考以下文章
Java 感觉在try语句中嵌套if语句不怎么美观,请问怎么优化