Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.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_Methods_Boolean - Fatal编程技术网

Java 布尔返回法

Java 布尔返回法,java,methods,boolean,Java,Methods,Boolean,这是一个布尔方法,是我作业的一小部分。我想根据输入和记录之间是否存在匹配返回true或false。我想我遇到了语法问题 public boolean checkPhone(String[]param) { for(String s: param) { for(Residents r: petshop) { if(s.equals(r.getPhone())) { ret

这是一个布尔方法,是我作业的一小部分。我想根据输入和记录之间是否存在匹配返回true或false。我想我遇到了语法问题

public boolean checkPhone(String[]param) {
    for(String s: param)
    {
        for(Residents r: petshop)
        {
            if(s.equals(r.getPhone()))
            {
                return true;
            }
        }

    }       
}

这是该方法的代码,但始终有红线指示我应该在代码中添加return,否则将该方法更改为void。但是我已经在if语句中添加了returntrue

正如前面的注释所述,您需要一个额外的
返回值
,因为具有非void返回类型的每个方法都要求每个可能的路径都有一个返回值

public boolean checkPhone(String[] param)
{
    for (String s : param) {
        for (Residents r : petshop) {
            if (s.equals(r.getPhone())) {
                return true;
            }
        }
    }
    return false;
}

使用变量将状态
true
存储在if循环中,然后在循环结束时返回该变量

请参阅以下一项:

public boolean checkPhone(String[] param) {
    boolean state;
    for (String s: param) {
        for (Residents r: petshop) {
            if (s.equals(r.getPhone())) {
                state = true;
            }
        }

    }
    return state;
}

只需添加一个
返回false在for循环之外,以便该方法在所有可能的条件下都有一个return语句。这意味着即使方法执行从未找到匹配项,该方法也应该能够返回布尔值,即false,这意味着它没有找到任何匹配项

public boolean checkPhone(String[] param)
{
    for (String s : param) {
        for (Residents r : petshop) {
            if (s.equals(r.getPhone())) {
                return true;
            }
        }
    }
    return false; // This is the fix
}

或者,您可以声明一个
boolean retVal=false
,并在
s.equals(r.getPhone())
的情况下将其设置为true,但始终返回此变量

public boolean checkPhone(String[] param) {
    // declare the return value
    boolean retVal = false;
    for (String s : param) {
        for (Residents r : petshop) {
            if (s.equals(r.getPhone())) {
                retVal = true;
            }
        }
    }
    return retVal;
}

与@maio290的解决方案不同的是,无论某个元素是否满足条件,循环始终完全运行。这可能会成为一个性能问题。

这是因为如果您的if条件不成立,那么您将不会返回任何内容。 参考这个

public boolean checkPhone(String[] param) {
   boolean isMatch = false;
      for (String s: param) {
         for (Residents r: petshop) {
           if (s.equals(r.getPhone())) {
              isMatch = true;
           }
         }

     }
   return isMatch ;
}

添加一个
返回false返回false在末尾。如果没有匹配项,则没有指向return语句的代码路径。这就是编译器试图告诉您的。什么是
petshop
?另外,正如其他人所说,如果
param
petshop
为空或不匹配,则需要返回一个值,因此在方法末尾添加
return false
。请注意,这仍然不会编译,因为您忘记初始化
状态
。这很慢,因为它每次都会检查每一对,与检查成功后立即返回相反,这是第三个提出这种方法版本的答案,但它比立即返回慢,因为它不是短路。