2015-06-11 255 views
-2

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

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 
} 

回答

8

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

在第一次迭代中,i++发生并且i现在是2。您将!btrue指定为b,并且这是while循环条件。条件满足,所以下一次迭代发生。

在第二次迭代中,i++发生并且i现在是3。您将!bfalse指定为b,这就是while循环条件。条件不满足,所以do-while循环结束,并打印3

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

+0

while(b ==!b)将跳出循环。而(b!=!b)将导致无限循环。 – codedabbler

+0

@ddalton这就是我没有测试时发生的事情!固定。 – rgettman

+0

哦好的!所以在第二次迭代中,!b变回false ......好酷,这就是我错过了,!(不) –

1

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

在第二次遇到表达式计算结果为false,所以循环退出。

那么,我会增加两次。所以最终的值是3.