for循环没有大括号在java中

时间:2017-05-27 21:51:23

标签: java for-loop curly-braces

我想知道为什么这两个代码会给出不同的结果;

for(i = 1, j = 0; i < 10; i++) {
    j += i;
    System.out.println(i);
}

这个给出了包括1和10之间的数字。

for(i = 1, j = 0; i < 10; i++)
    j += i;
System.out.println(i);

然而,这个给出10.我无法得到这个逻辑;

for()
do_something;
do_something_else;

5 个答案:

答案 0 :(得分:4)

在第二个示例中,输出在for循环之外。不带花括号的for循环仅包含以下语句。

答案 1 :(得分:4)

for循环,while循环和if语句(忽略else都控制一个语句

  

for ( [ForInit] ; [表达式] ; [ForUpdate] {{ 1}} 声明

     

) {VariableModifier} UnannType VariableDeclaratorId for ( 表达式 : 声明

     

) 表达式 while ( 声明

     

) 表达式 if ( 声明

该陈述可能是Block,即带有多个陈述的大括号)

所以,这段代码完全相同:

{}
for(i=1, j=0;i<10;i++)
j += i;
System.out.println(i);
for(i=1, j=0;i<10;i++)
    j += i;
    System.out.println(i);
for(i=1, j=0;i<10;i++)
    j += i;
System.out.println(i);

前两个非常糟糕,因为它们隐藏(歪曲)代码结构。

许多人主张总是使用块,以防止混淆和编码错误。

答案 2 :(得分:2)

这是因为你的案例中迭代的默认范围是它后面的唯一一行,相当于 -

for(i=1, j=0;i<10;i++){
    j += i;
    System.out.println(i);
}

因此整个循环是迭代的,因为在那之后i == 10的值,这是你在第二种情况下的输出。

在第一种情况下,非常明显的是每次迭代都会打印出值,因此1到9(小于10):

{{1}}

答案 3 :(得分:1)

没有大括号的循环仅适用于下一个语句

所以:

 for(i=1, j=0;i<10;i++)
    j += i;
System.out.println(i);

相当于:

 for(i=1, j=0;i<10;i++){
        j += i;
 }
    System.out.println(i);

i是在循环范围之外定义的,并且在最后一个循环之后递增,因此它的值为10

答案 4 :(得分:1)

第一个语句包含代码块。代码块作为一个单元处理。

要创建代码块,您应该在花括号之间插入语句。

如果没有指定代码块,

循环和条件表达式只处理它们下面的第一个语句。

因此:

// Both statements handled 10 times
for(i = 1, j = 0; i < 10; i++) {
    j += i;
    System.out.println(i);
}

// Only the first statement handled 10 times, the second one is out of scope of the loop
for(i = 1, j = 0; i < 10; i++)
    j += i;
System.out.println(i);