2011-12-29 69 views
1

为什么下面的代码执行六次?请帮助我理解这是如何运作的,因为我试图在没有成功的情况下让它进入我的脑海。Java - 做循环帮助解释所需

我认为这将首先执行代码一次,则增大计数,执行它一个秒时间,增加计数,执行它一个第三时间,增加计数,执行它一个第四时间,增加计数,执行它一个第五时间,增加计数到5,然后停止。这意味着它将执行循环五个次(第一次,然后当计数是1,2,3,4)。

int count = 0; 

    do { 

     System.out.println("Welcome to Java!"); 

    } while (count++ < 5); 

回答

2

您是否尝试过运行this code

int count = 0; 

do { 

    System.out.println("Welcome to Java! " + count); 

} while (count++ < 5); 

输出:

Welcome to Java! 0 
Welcome to Java! 1 
Welcome to Java! 2 
Welcome to Java! 3 
Welcome to Java! 4 
Welcome to Java! 5 

这会帮助你明白发生了什么。其他人是否说过你的困惑最有可能在后增量操作员的工作方式上。

为了帮助您了解前置和后置递增操作符让我们运行another code sample

int a = 0; 
int b = 0; 
System.out.println("pre increment "+ ++a); 
System.out.println("post increment "+ b++); 

输出:

pre increment 1 
post increment 0 

总结:带后增量的表达式求值之前变量递增,在预增加之后,表达式被评估为之后变量e递增。

1

其后缀运算所以整个表达式的第一评价;然后增加

控制将流这样

0 
Welcome to Java! 
//condition check : 0 then 1 
Welcome to Java! 
//condition check : 1 then 2 
Welcome to Java! 
//condition check : 2 then 3 
Welcome to Java! 
//condition check : 3 then 4 
Welcome to Java! 
//condition check : 4 then 5 
Welcome to Java! 
//condition check : 5 then 6 
+0

比较完成后执行'count ++'。 – ZeissS 2011-12-29 17:18:57

0
count++; // <-- would execute the above code 6 times 

是后增量和

++count; // <-- would execute the above code 5 times 

是预增量

考虑:

while (count++ < 5) System.out.println(count); // prints 1 2 3 4 5 
while (++count < 5) System.out.println(count); // prints 1 2 3 4 

所以你do...while第一执行没有一个比较(因为做的),然后运行比较。

如果是预递增它可以被重新写成这样:

int count = 0; 
do { 
    // print 
    count = count + 1; 
} while (count < 5) 

如果是后递增它可以被重新写成这样:那是因为你使用

int count = 0; 
while (count < 5) { 
    // print statement 
    count = count + 1; 
} 
1

后递增。首先对while条件进行评估(的值为之前为的增量),然后count递增。

尝试++count(首先增加然后返回值)。

编辑:

注意的是,虽然使用它在

for(int i = 0; i < n; i++) {} 

是确定的(它通常会得到优化,等等),

for(int i = 0; i < n; ++i) {} 

是从更好一点语义角度来看IMO。

在运算符重载的语言中,它变得更加复杂,其中i ++可能与++ i有不同的副作用。