1

为什么下面的代码会执行六次?请帮助我理解它是如何工作的,因为我试图将它带入我的脑海,但没有成功。

我以为它会先执行一次代码,然后将count增加到1第二次执行,将count增加到2第三次执行,将count增加到3第四次执行,将count增加到4,执行第五次,将计数增加到 5,然后停止。这意味着它将执行五次循环(第一次,然后在 count 为 1、2、3、4 时执行)。

int count = 0;

    do {

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

    } while (count++ < 5);
4

4 回答 4

2

您是否尝试过运行此代码

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

这应该可以帮助您了解正在发生的事情。其他人是否说过您的困惑很可能是后增量运算符的工作方式。

为了帮助您了解前后增量运算符,让我们运行另一个代码示例

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

输出:

pre increment 1
post increment 0

总结:使用后自增,表达式在变量递增之前进行评估,使用前自增,表达式在变量递增之后进行评估。

于 2011-12-29T17:31:34.697 回答
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
于 2011-12-29T17:17:04.463 回答
1

那是因为您使用的是后增量。首先while评估条件(使用增量之前count的值)然后递增。count

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

编辑:

请注意,虽然在

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

没问题(它通常会得到优化等),

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

从语义的角度来看,IMO 稍微好一点。

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

于 2011-12-29T17:19:48.133 回答
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;
}
于 2011-12-29T17:19:17.367 回答