我收到此错误,我真的不明白为什么。代码:
b1.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
// TODO Auto-generated method stub
boolean b = true;
if(b == true){
tv1.setText("true");
b2.setEnabled(false);
b = false;
} else
if(b == false){
b2.setEnabled(true);
b = true;
tv1.setText("false");
正如你所看到的那样,当我点击一个按钮时,它会检查变量“b”是真还是假,然后它应该执行以下代码。但事实并非如此!它只对“if b == true”执行操作。你能救我吗?
答案 0 :(得分:4)
可能因为b在此声明后总是如此:
boolean b = true;
另外,b是一个布尔值,你可以简单地写:
if (b) {
//
} else {
//
}
这可能会按预期工作(未经测试):
b1.setOnClickListener(new View.OnClickListener() {
private boolean b = true;
public void onClick(View arg0) {
// TODO Auto-generated method stub
if(b){
b2.setEnabled(false);
tv1.setText("true");
} else {
b2.setEnabled(true);
tv1.setText("false");
}
b = !b; //this changes b from true to false and vice versa at each call
}
});
答案 1 :(得分:1)
您必须在监听器
之外声明变量bboolean b = true;
b1.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
// TODO Auto-generated method stub
if(b == true){
tv1.setText("true");
b2.setEnabled(false);
b = false;
} else
if(b == false){
b2.setEnabled(true);
b = true;
tv1.setText("false");
答案 2 :(得分:1)
变量'b'是方法范围内的局部变量,因此当onClick()方法执行时它始终为true。您需要将变量移动到类范围中。像这样:
b1.setOnClickListener(new View.OnClickListener() {
boolean b = true;
public void onClick(View arg0) {
if (b) {
tv1.setText("true");
b2.setEnabled(false);
b = false;
} else {
b2.setEnabled(true);
b = true;
tv1.setText("false");
}
}
});
答案 3 :(得分:0)
你想使用static修饰符来保持变量的状态(因为当它超出范围时它的状态不会被保留。)这也意味着你必须将变量移到a全球范围。
答案 4 :(得分:0)
从你提出的代码中,这就是我能想到的原因:
最初,您的b变量设置为true。因此,它进入b == true
条件。
但是当你将b==false
“设置在内部”时,如果它不会转到其他地方。原因很简单,因为当你已经转到“if”语句时,这是if语句被验证为真的条件,计算机不需要查找“else”语句,因此不会进入它。
如果你有两个连续的ifs而不是别的,你的东西会按照你期望的方式运作。