在这里,我们有一个长期的假设,需要在脑海中清除。以下是嵌套'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语句”有效。
答案 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条件