据我所知,for循环的范围,后面没有一组括号,只是一个语句。对? 那么为什么这段代码:
for(int x = 0; x < 3; x++)
if(x < 2)
System.out.println("hello");
System.out.println("world");
给出输出:
hello
hello
world
if
中的语句是否也被认为是for循环的一部分?当然是,我的问题是为什么?实际上是什么,范围是一个块后面的语句,因为上面的代码修改时像这样:
for(int x = 0; x < 3; x++)
if(x < 2) {
System.out.println("hello");
System.out.println("world");
}
给出输出:
hello
world
hello
world
编辑:以下大多数答案都是关于解释上述代码中的流量控制,我已经知道了。我的问题是关于for循环范围的规则。
规则实际上是这样的:无括号for
循环的范围是紧随其后的下一个语句块吗?
答案 0 :(得分:3)
First x=0
Then if (x < 2) condition satisfies (again no braces, so only one statement executes)
Prints "hello"
for loop continues
x=1
Then if (x < 2) condition satisfies (again no braces, so only one statement executes)
Prints "hello"
for loop continues
x=2
Then if (x < 2) condition NOT satisfies, so if statement won' execute, moves to print "world"
Prints "world"
第一个片段将被视为:
for(int x = 0; x < 3; x++){
if(x < 2) {
System.out.println("hello");
}
}
System.out.println("world");
答案 1 :(得分:3)
您应该阅读Braceless if considered harmful。这篇文章是专门制作的,因为这样的例子;无支撑控制流程语句的混乱可能会让你头疼一段时间,特别是在误导性缩进的情况下(例如在你的例子中)。
您粘贴的代码等同于以下内容,
for (int x = 0; x < 3; x++) {
if (x < 2) {
System.out.println("hello");
}
}
/* outside of the for */
System.out.println("world");
如您所见,循环迭代三次;前两个,它将打印"hello"
。循环完成后,它将打印"world"
。
在阅读Chapter 14 of the Java Language Specification时,其工作原理很明显。实际上,根据§14.5将 blocks 视为语句是有意义的。
for (int x = 0; x < 3; x++) if (x < 2) System.out.println("hello"); System.out.println("world");
查看if
(§14.9)和basic for
(§14.14.1)的描述,我们看到两者都只是发表声明;在这种情况下,我们可以看到我们的for
语句包含if
语句,该语句本身封装了您的println("hello")
语句。在for
语句后,您将获得println("world")
声明。
for (int x = 0; x < 3; x++) if (x < 2) { System.out.println("hello"); System.out.println("world"); }
在这里,我们看到for
语句主体是if
语句,它封装了包含 2 语句的块,即你的println
陈述。请注意,这确实与前者不同。
希望这能为你解决问题。
答案 2 :(得分:1)
循环后的一行,在循环体中考虑条件,条件是你没有使用{}
所以在for body中只考虑if
for(int x = 0; x < 3; x++)
if(x < 2)
System.out.println("hello");
System.out.println("world");
提供输出hello hello world
,因为
当循环结束world
打印时,在for循环中考虑if语句后的唯一一行
喜欢
for(int x = 0; x < 3; x++)
{ if(x < 2)
System.out.println("hello");
}
System.out.println("world");
并在
中 for(int x = 0; x < 3; x++)
if(x < 2) {
System.out.println("hello");
System.out.println("world");
}
两个System.out.println("hello"); System.out.println("world");
在for循环中考虑
答案 3 :(得分:0)
这样看......
for
和if
控制下一个声明或 {...}
中包含的。
如果缺少{}
,则只将下一个语句视为正文。
在第一种情况下,我已经纠正了缩进,以便身体部位清晰可见。
for(int x = 0; x < 3; x++)
if(x < 2)
System.out.println("hello");
System.out.println("world");
答案 4 :(得分:0)
如果在循环或条件语句被视为其范围的一部分之后没有将{}
仅放在下一行。
答案 5 :(得分:0)
这是正确的事情。它为i = 0和1打印“hello”,然后为循环结束打印并打印“world”。
我认为您对齐的方式感到困惑,以下是第一个看起来的方式 -
for(int x = 0; x < 3; x++) {
if(x < 2) {
System.out.println("hello");
}
}
System.out.println("world");
第二个 -
for(int x = 0; x < 3; x++) {
if(x < 2) {
System.out.println("hello");
System.out.println("world");
}
}
更易读和易懂的逻辑。