Java 只有在(条件)下才能进行
我有这个密码Java 只有在(条件)下才能进行,java,android,if-statement,Java,Android,If Statement,我有这个密码 spinRoullete.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (errors()){ something return;} if (!errors()){ somethin
spinRoullete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (errors()){
something
return;}
if (!errors()){
something else}
这是错误
private boolean errors() {
if (Rone.isChecked()) {
if (nr1.getText().length() == 0) {
nr1.setError("");
} else {
nr1.setError(null);
}
} if (Rtwo.isChecked()) {
if (nr1.getText().length() == 0) {
nr1.setError("");
} else {
nr1.setError(null);
}
if (nr2.getText().length() == 0) {
nr2.setError("");
} else {
nr2.setError(null);
}
}
这里有点不对劲,我不知道是什么。。文本错误会出现,当我完成nr1或nr2(编辑文本)时会消失,但第二个if在onClick中有问题。当错误消失时,我想继续到那一秒,如果(还有其他东西)。。我应该编辑什么来实现这一点?首先,小优化改进:您有以下代码(格式化以提高可读性,相同的代码): 但您不需要至少一个,因为您有一个返回语句:
if(errors()){
something
return;
}
something else...
如果没有错误,该方法将被调用一次而不是两次,因此可以避免出现问题
但是您永远不会从errors()返回任何可见的值。最有可能的是,在底部有return true
,这意味着它总是进入第一个if语句。只需更改方法:
private boolean errors() {
boolean i1 = false;//if no errors, return false
if (Rone.isChecked()) {
if (nr1.getText().length() == 0) {
nr1.setError("");
i1 = true;//There is at least one error
} else {
nr1.setError(null);
}
}
if (Rtwo.isChecked()) {
if (nr1.getText().length() == 0) {
nr1.setError("");
i1 = true;//there is at least one error
} else {
nr1.setError(null);
}
if (nr2.getText().length() == 0) {
nr2.setError("");
return true;//This is the last thing that can happen, so just return true. There is at least one error, this one
} else {
nr2.setError(null);
return i1;//there could have been an error earlier, so return i1
}
}
return i1;//and if the last box isn't checked, return i1 here
}
最有可能的是,在方法的底部有return true
。这意味着它将始终进入第一个if语句并返回,即使没有错误
你真的应该开始研究缩进约定,你发布的一些代码很难阅读,因为是否可能同时检查
Rone.isChecked()
和Rtwo.isChecked()
?不,你不能。如果出现错误,您将无法继续。为什么您需要第二个if
?当你在代码中达到这个位置时,你知道已经没有错误了,否则你会在之前执行返回操作。我会记住你的回答给@zoe的好答案
private boolean errors() {
boolean i1 = false;//if no errors, return false
if (Rone.isChecked()) {
if (nr1.getText().length() == 0) {
nr1.setError("");
i1 = true;//There is at least one error
} else {
nr1.setError(null);
}
}
if (Rtwo.isChecked()) {
if (nr1.getText().length() == 0) {
nr1.setError("");
i1 = true;//there is at least one error
} else {
nr1.setError(null);
}
if (nr2.getText().length() == 0) {
nr2.setError("");
return true;//This is the last thing that can happen, so just return true. There is at least one error, this one
} else {
nr2.setError(null);
return i1;//there could have been an error earlier, so return i1
}
}
return i1;//and if the last box isn't checked, return i1 here
}