1

这是我无法理解的行为。

class loop1 {
    public static void main(String args[]) {
        int i = 10;

        do
            while(i++ < 15) {
                System.out.println(i);
                i = i + 20;
                System.out.println(i);
            } 
        while(i<2);

        System.out.println(i);    
    }

}

我希望它打印出来

11
31
31

但它打印

11
31
32

我不明白为什么这个“32”出现在输出中。

这是我对流量的理解

  • 我 = 10
  • 在 while 循环中因为一元增量,它变成 11 所以这解释了第一个输出
  • 11 通过 (+20) 增加到 31
  • 然后 31 < 15 应该失败(在下一次迭代期间),因此它应该继续执行最后一个 print 语句并打印 31,但它正在打印 32。

有人能告诉我我错过了什么吗?

4

6 回答 6

5

在第一个 while 循环的最终评估期间,即使由于条件失败,循环没有执行,它i++仍然会递增。i

class loop1 {
    public static void main(String args[]) {
        //1.  i = 10
        int i = 10;

        do 
            // 2. while loop condition = (10 < 15), i = 11
            // 6. while loop condition = (31 < 15), i = 32
            while(i++ < 15) {
                System.out.println(i);  //3. prints 11
                i = i + 20; //4. i = 31
                System.out.println(i);  //5. prints 31
            } 

        while(i<2); //this really has no effect on the codes execution, given i values

        System.out.println(i); //7.  Prints 32
    }

}
于 2013-08-19T11:37:21.610 回答
4
i++

您将值增加 1。当您在第一次迭代后增加它时,该值是31. 31 + 1是,令人惊讶的是,32。并且在增加值后直接打印出该值。

于 2013-08-19T11:36:45.557 回答
2


while(i++<15)
在第 2 次迭代中,当时检查了 while 循环的条件,i is 31因此条件失败但i++更改了i 31 -> 32

于 2013-08-19T12:19:58.940 回答
2

while(i++ < 15)将 i 的值与 i 递增 1 进行比较

于 2013-08-19T12:26:54.013 回答
1

我的猜测是:

while(i++ < 15)

在第二i++个循环中将值从 31 增加到 32。

请注意,++即使条件失败,也会执行 - 在您的情况下,31 大于 15(条件失败),但是由于++该值增加到 32,最后由 打印输出System.out

于 2013-08-19T11:38:36.393 回答
0

在程序中:

 while(i++<15)

上面的语句是这个语句中的条件检查,你是后增量 i,因此 31+1=32 即将到来

于 2013-08-19T11:55:20.800 回答