Java Do While循环

时间:2015-06-11 18:43:30

标签: java

我知道在while循环中,do循环首先迭代,然后检查条件。但为什么这段代码打印3,它不应该进入无限循环?但是如果我用真替换b =!b。它确实进入了无限循环。这是为什么? (我是一个新手所以我可能会遗漏一些愚蠢的东西)

public static void main(String[] args) {
   boolean b = false;
   int i = 1;
    do{
        i++ ;
    } while (b = !b);           //shouldn't this loops forever, if i put true, it does loop for ever why?
    System.out.println( i );    //prints 3
}

2 个答案:

答案 0 :(得分:8)

您正在使用赋值运算符=,而不是比较运算符==

在第一次迭代中,i++发生,i现在为2。您将!btrue分配给b,这就是while循环条件。条件得到满足,因此下一次迭代就会发生。

在第二次迭代中,i++发生,i现在为3。您将!bfalse分配给b,这就是while循环条件。条件不满足,因此do - while循环结束,并打印3

如果你说while (b == b);,那将是一个无限循环。 while (b != b);会在第一次迭代后突破,打印2

答案 1 :(得分:1)

第一次评估b =!b时,b将被设置为true,结果表达式为真,因此循环再次运行。

在第二次遇到时,表达式的计算结果为false,因此循环退出。

到那时,我将增加两次。所以最终的值是3。