我知道如果没有花括号用于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;
}
作为单一陈述?我知道使用大括号是很好的编码惯例,但我只是想知道这里发生了什么。
答案 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循环将被视为第一个循环的单个语句,此循环表示内循环。