所以,我下周将面对决赛,我经历了一些旧的测试。这个引起了我的注意,因为我似乎无法理解代码。
public class Start {
boolean zustand = false;
public static void main (Strings[] args){
Start obj = new Start();
for(int i = 0; i <= 3; i++){
if(obj.getZustand() == true){
System.out.println(""+i+ " true");
}
else{
System.out.println(""+i+ " false");
}
}
}
public boolean getZustand(){
zustand = (zustand == false);
return zustand;
}
}
我认为输出是
0 true
1 true
2 true
3 true
但是我在eclipse上尝试了它们,输出是
0 true
1 false
2 true
3 false
有人可以向我解释为什么他们并非都是真的吗?
答案 0 :(得分:4)
每次调用zustand
函数时,getZustand
变量都会更改。
zustand = (zustand == false);
这行代码与zustand = !zustand
相同。请注意zustand
是一个类成员字段,因此它的值保持在函数调用之间。
答案 1 :(得分:2)
第一次迭代将成员变量zustand
设置为true; false == false
是true
。第二次迭代将变量设置为false
; true == false
是false
。然后他们在您发布时交替使用。
答案 2 :(得分:1)
每次拨打zustand
时,getZustand()
的值都会交替显示。这是因为您要为zustand
分配第一个false == false
,true
,然后true == false
,即false
,依此类推......
答案 3 :(得分:1)
zustand = (zustand == false);
如果zustand
true
,则zustand == false
为false
且zustand
已分配给 false
强>
如果zustand
false
,则zustand == false
为true
且zustand
已分配给 true
强>
换句话说,行zustand = (zustand == false)
翻转zustand
的值(然后返回)。这解释了你的输出。
答案 4 :(得分:0)
每次调用getZustand时,都会翻转obj中的布尔值。
要实现所需的输出,只需返回(zustand == false),或者更简单地说,(!zustand)。