2012-02-06 151 views
0
for(int i=0;i<10;i++) { 
    System.out.println(i); 
} 

在这个简单的for循环中,我们将i初始化为零,并且每一次都增加它。但是,如果我们已经增加了i,为什么我的输出从0开始。是不是必须为0?还有一个迹象表明关于for循环的混淆

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

它们都是为了循环,但为什么输出不同?

+0

合并2回答以下问题,你会得到正确的答案:) – 2012-02-06 16:13:17

+0

'他们都为循环偏偏输出不同的?',因为他们是不一样的东西。如果你在调试器中遍历代码,你将会看到每一行的功能。 – 2012-02-06 16:22:57

回答

13

大概是因为

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

相当于:

for(int i=0;i<10;) { 
    System.out.println(i); 
    i++; 
} 
4

在:

for(int i=0;i<10;i++) { 

i++被每次迭代之后不之前执行

换句话说,这个循环就相当于:

int i = 0; 
while (i < 10) { 
    System.out.println(i); 
    i++; 
} 

注意,i++发生println()而不是之前。

0

输出是不同的,因为for循环(第三个字段)的迭代步骤发生在代码执行后。

这相当于语句的第一个for循环:

for(int i=0;i<10;) { 
    System.out.println(i); 
    i++; 
} 
2

方式的for循环看起来是这样的:

for (initializer; condition; increment) 
    statements; 

它是这样执行的:

initializer; 
while (condition) 
{ 
    statements 
    increment 
} 

所以,增量只发生在执行statements之后。

0

在第一个中,i ++在循环结束时执行。那是在循环块完成之后。 IT像编译器一样将i ++添加到循环体的末尾。所以最初i的值是0,并在循环结束时递增。在第二种情况下,您在循环开始时手动增加它

1

它在您的代码中从一个开始的原因是您要在使用之前先增加它: System.out.println(i) ;

0

第一个for参数是初始化;它在每次整个操作之前评估一次。第二个参数是一个条件。它在每一个单一循环之前执行,只有循环为真才会继续循环。第三个for参数是迭代的,它会评估AFTER EACH周期,包括最后一个周期。

最后一条规则可以将循环放入链中。您应该从for中删除int定义,然后在外部某处定义循环变量。

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/for.html