for循环的范围

时间:2012-08-17 04:06:32

标签: java for-loop

据我所知,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循环的范围是紧随其后的下一个语句块吗?

6 个答案:

答案 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)

这样看......

forif 控制下一个声明 {...} 中包含的

如果缺少{},则只将下一个语句视为正文。

在第一种情况下,我已经纠正了缩进,以便身体部位清晰可见。

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");
    }
}

更易读和易懂的逻辑。