我知道在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
}
答案 0 :(得分:8)
您正在使用赋值运算符=
,而不是比较运算符==
。
在第一次迭代中,i++
发生,i
现在为2
。您将!b
或true
分配给b
,这就是while
循环条件。条件得到满足,因此下一次迭代就会发生。
在第二次迭代中,i++
发生,i
现在为3
。您将!b
或false
分配给b
,这就是while
循环条件。条件不满足,因此do
- while
循环结束,并打印3
。
如果你说while (b == b);
,那将是一个无限循环。 while (b != b);
会在第一次迭代后突破,打印2
。
答案 1 :(得分:1)
第一次评估b =!b时,b将被设置为true,结果表达式为真,因此循环再次运行。
在第二次遇到时,表达式的计算结果为false,因此循环退出。
到那时,我将增加两次。所以最终的值是3。