来自while循环Java的意外输出

时间:2013-08-19 11:34:14

标签: java

这是我无法理解的行为。

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”出现在输出中。

这是我对流程的理解

  • i = 10
  • 在while循环中,由于一元增量,它变为11,因此这解释了第一个输出
  • 11增加到31(+20)
  • 然后31&lt; 15应该失败(在下一次迭代期间),所以它应该进入最后一个打印语句并打印31,但它打印32.

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

6 个答案:

答案 0 :(得分: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 } }

{{1}}

答案 1 :(得分:4)

i++

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

答案 2 :(得分:2)

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

答案 3 :(得分:2)

while(i++ < 15)将i的值与该增量之后的i进行比较1

答案 4 :(得分:1)

我的猜测是:

while(i++ < 15)

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

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

答案 5 :(得分:0)

在该计划中:

 while(i++<15)

以上语句是本声明中的条件检查 你是后期增量因此31 + 1 = 32即将来临