我正在进行oracle认证的Java SE7程序员联合实践考试(书中),并且遇到了一个问题,即使有解释,我也不明白答案。 这是解释和代码:
它将打印3.循环体执行两次,程序将打印3。
我不明白循环体是如何执行两次的,也许我不明白b=!b
的意思。有人可以解释一下吗?
class TestClass {
public static void main(String args[]){
boolean b = false;
int i = 1;
do{
i + + ;
} while (b = !b);
System.out.println(i);
}
}
答案 0 :(得分:4)
b = !b
是一个 赋值 ,它将b的倒数分配给自身(有效地在true和false之间翻转)
在java中,赋值返回已分配的内容(以便a=b=1
成为可能)
因此while (b=!b)
将翻转b的值,然后检查b的值。
答案 1 :(得分:1)
b=!b
永远是真的,为什么?
因为,你正在做的是你插入“b”相反的值(T-> F,F-> T),如果没有问题,while (b = !b);
将返回TRUE ....登记/>
因此,在您的情况下,while (b = !b);
将始终返回true
答案 2 :(得分:1)
迭代1
boolean b = false;
int i = 1;
do{
i++ ; // i = 2
} while (b = !b); // b = !false = true so one more execution
迭代2
do{
i++ ; // i = 3
} while (b = !b); // b = !true = false so loop breaks
所以它会打印3
。简单:))
实际上,混淆是=
符号。 =
分配运算符,其中==
是条件运算符。第一个将分配值,而稍后将检查条件。您可以使用它并获得其他结果,如
int a = 6;
int b = 10;
System.out.println(a = b);
System.out.println(a == b);
你会明白的。
答案 3 :(得分:1)
在第一次迭代结束时,由于增量运算符,变量i
将为2
。表达式b=!b
将生成true
(b = !false
)并将变量b
设置为true
。所以循环再次执行。
在第二次迭代结束时,变量i
现在是3
。表达式b=!b
将生成false
(b = !true
),这也是变量b
的值。因此整个do-while-loop终止,println()
语句显示3
。
请记住:=
(assign运算符)与==
(相等检查)不同。
答案 4 :(得分:0)
条件
b = !b;
使用赋值运算符,该运算符返回已分配的值。
最初,b
为false,因此true
已分配给b
,并用于此条件。因此while循环第二次执行。在此执行中,b
为真,因此false
被分配给b
并用于循环条件。因此循环退出。