2015-10-11 33 views
0

c1离开循环(之后)之前的最后一个值是6.它是如何6?该变量的最后一个已知值是5嵌套循环和最终值

这里是代码snipplet

int c1, c2; 

for (c2 = 4; c2 <= 5; c2++) 
{ 
for (c1 = 2; c1 <= 5; c1++) 
{ 
System.out.println("#"+""+c1); 
} 
System.out.println(c2 + " " + c1); 
} 
System.out.println("\nLoop is done"); 
+0

请修改您的问题以添加评论中的信息;并请缩进你的代码。 –

+0

这个问题与* nested * for循环无关:你可以去掉外部for循环并移除'c2'变量,并且你仍然可以看到'c1'发生的事情。 –

回答

5

没有最后的值是6迭代5次它c1++后再循环的下一次迭代失败for循环的c1 <= 5检查并退出循环。但是c1已经是6了。但是,从来没有打印过,因为它只在循环中。

+1

让我了解你。 java的执行顺序如下: 1.它评估c1 = 1 2.它评估1小于布尔条件 3.执行主体 4.然后它执行c1 = c1 + 1(这是增量)。 ...在最后一次迭代中, 1.它打印正文(它是5) 2.做增量是5 + 1 3.检查布尔语句是否为false,因为6 <5 4。保留存储在该变量中的最后已知的c1值,即6 – Borla312

+0

是的,循环通常用于大多数语言。在这种情况下,由';'分隔的三个语句首先在整个循环开始之前执行(init,仅一次),在每个循环之前测试一个循环条件(循环再循环或不循环),然后在每个循环之后执行最后一个语句。 –

+1

我现在明白了。猜猜它只是其中的一些东西(虽然逻辑上和顺序上有意义),但仍然需要记住。 Nuance某种 – Borla312

0

for循环检查条件以确定是否应该跳过正文。您的情况是c1 <= 5。因此,在最后一次迭代中,c1 = 5,然后它确实c1++。所以c1 = 6,此时c1 <= 5为假。

+0

这只是java自动脱离循环的东西吗?我明白,最后一次迭代c1 = 5,但为什么额外的C1 ++? 让我理解你。所以作为头部的一部分,当它达到c1 = 5时,它仍然通过头部并递增1.之后,它注意到布尔值为假并存在循环,但它保留了最终语句c1的值= c1 + 1? – Borla312

+0

在每次迭代结束时,for循环执行增量语句'c1 ++'。然后,它跳回到循环的开始。此时,它评估条件'c1 <= 5'。最后一次迭代导致'c1 ++ = 6'。因此,在评估条件时,它决定它是假的,然后跳出循环而不是执行正文。 – Kevin

+0

Kevin- 它看起来我是我们在同一页面上。那么最后一个值是6就是一个细微差别?如果我没有在循环外部使用print语句,很难知道最后一个值是一个额外的增量。如果print语句在循环中,则值为5. – Borla312

0

对于三个(可选)部分的循环利益:初始化,终止条件和更新声明。 更新语句(c1 ++)始终在循环的每次迭代结束时执行。

对于c1 = 5条件的最终迭代是真实的,因为5 < = 5。 Println将被执行,之后将更新语句将c1增加到6.由于6不是< = 5,循环将终止。

所以最终的已知值确实是6而不是5,请注意,否则循环将永远不会停止,因为条件成立。