2017-05-27 150 views
-3

我想知道为什么这两个代码给出不同的结果;for循环无花括号在java

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; 

回答

1

这是因为一个迭代的默认范围是它后只以下行,你的情况的东西等同于 -

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

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


在第一种情况下,这是很明显的是,值被印刷在每次迭代,因此1至9(小于10):

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); 
3

for回路中,while环,并且if语句(忽略else所有控制单个声明

for ([ForInit];[Expressi上];[ForUpdate])声明

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

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

前两个是非常糟糕的,因为他们隐藏(误传)的代码结构。

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