【问题标题】:return in boolean method以布尔方法返回
【发布时间】:2018-10-23 11:34:22
【问题描述】:

这是一个布尔方法,是我的任务的一小部分。我想根据输入和记录之间是否匹配来返回真或假。我想我遇到了语法问题。

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

    }       
}

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

【问题讨论】:

  • 在循环之后添加return false;
  • return false; 在最后。
  • 如果不匹配,则没有导致返回语句的代码路径。这就是编译器试图告诉你的。
  • petshop 是什么?另外,正如其他人所说,如果 parampetshop 为空或不匹配,则需要返回一个值,因此请在方法末尾添加 return false

标签: java methods boolean


【解决方案1】:

正如 cmets 已经说过的,您需要一个额外的 return,因为每个具有非 void 返回类型的方法都要求每个可能的路径都有一个返回值。

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

【讨论】:

    【解决方案2】:

    只需在 for 循环之外添加一个return false;,以便该方法在所有可能的条件下都有一个返回语句。这意味着即使方法执行从未找到匹配项,即使这样,该方法也应该能够返回一个布尔值,即 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
    }
    

    【讨论】:

      【解决方案3】:

      或者,您可以声明 boolean retVal = false 并将其设置为 true 以防 s.equals(r.getPhone()) 但始终返回此变量。

      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 解决方案的不同之处在于循环始终完全运行,无论是否在某个元素处满足条件。这可能会成为性能问题。

      【讨论】:

        【解决方案4】:

        将状态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;
        }
        

        【讨论】:

        • 请注意,这仍然无法编译,因为您忘记初始化state
        • 这很慢,因为它每次都会检查每一对,而不是在检查成功后立即返回。
        【解决方案5】:

        这是因为如果您的 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 ;
        }
        

        【讨论】:

        • 这是提出此方法版本的第三个答案 - 但它比立即返回要慢,因为它不是短路的。
        猜你喜欢
        • 1970-01-01
        • 2015-01-22
        • 2012-11-03
        • 1970-01-01
        • 2020-04-18
        • 2013-10-01
        • 2012-11-04
        • 2012-09-19
        相关资源
        最近更新 更多