for循环没有大括号在java中

问题描述 投票:-1回答:5

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

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;
java for-loop curly-braces
5个回答
2
投票

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

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

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


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

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

5
投票

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

for ( [ForInit] ; [表达] ; [ForUpdate] )声明

for ( {VariableModifier} UnannType VariableDeclaratorId : Expression ) Statement

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);
for(i=1, j=0;i<10;i++) {
    j += i;
}
System.out.println(i);

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

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


4
投票

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


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


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);
© www.soinside.com 2019 - 2024. All rights reserved.