如果外部for循环没有大括号,内部for循环是否会被视为单个语句?

时间:2014-12-01 07:49:28

标签: java for-loop

我知道如果没有花括号用于for循环,那么它后面只能有一个语句。我的问题在于此代码:

for(int i=0;i<=10;i++)
  for(int j=10;j>=1;j--){
    if(i!=j)
      break;
    n=n+1;
  }
System.out.println(n);

第一个循环是否考虑整个第二个for循环

for(int j=10;j>=1;j--){
  if(i!=j)
    break;
  n=n+1;
}

作为单一陈述?我知道使用大括号是很好的编码惯例,但我只是想知道这里发生了什么。

4 个答案:

答案 0 :(得分:3)

for语句可以立即跟随另一个for语句,而不需要大括号。如果您对此类信息有疑问,请查看语言规范:

14.14.1 The basic for Statement将基本for语句描述为:

BasicForStatement:
  for ( [ForInit] ; [Expression] ; [ForUpdate] ) Statement

如果您点击Statement的链接,您会看到以下内容的所有有效选项:

Statement:
  StatementWithoutTrailingSubstatement
  LabeledStatement
  IfThenStatement
  IfThenElseStatement
  WhileStatement
  ForStatement    

请注意上面一行中的ForStatement

答案 1 :(得分:1)

是的,第一个(外部)循环将考虑整个第二个(内部)循环。

请考虑以下示例:

for(int x=0; x<5; x++)     //Will only consider the next statement (enter y-loop)
    for(int y=0; y<5; x++) //Will only consider the next statement (enter z-loop)
        for(int z=0; z<5; x++) //Will only consider the next statement (enter if-statement)
            if(...)

上述语句有效,因为即使每个循环(没有花括号)只会循环下一个语句,但在这种情况下,下一个语句是另一个循环语句。

同样适用于if-statements

考虑这个例子1:

if(a==0)
    if(b==0)
        System.out.println("This comes from b");
    else
        System.out.println("This else comes from b");

在上面的代码段中,else属于内部if-statement,因为外部if只考虑下一个语句。

请考虑此示例2:

if(a==0){
    if(b==0)
        System.out.println("This comes from b");
}    
else
    System.out.println("This else comes from b");

在第二个示例中,else现在属于第一个if-statement

就个人而言,我更喜欢使用大括号来确保清晰度,但是当我非常确定自己在做什么以及何时确切知道省略大括号的效果时,我仍然会省略它们。

答案 2 :(得分:0)

does the first loop consider the entire second for loop - 是的,是的,这是一个很好的约定,因为省略括号对于非统一编码环境来说比两个省略的字符更昂贵。

答案 3 :(得分:0)

肯定是的,第二个for循环将被视为第一个循环的单个语句,此循环表示内循环。