Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 只有在(条件)下才能进行_Java_Android_If Statement - Fatal编程技术网

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
}