【问题标题】:Why am I getting a "missing return statement" error? [duplicate]为什么我会收到“缺少退货声明”错误? [复制]
【发布时间】:2017-07-25 20:19:26
【问题描述】:

如果数组中的前 4 个元素之一是 9,则此方法应该返回 true。数组长度可能小于 4。在我的方法中,由于某种原因,我不断收到“缺少返回语句错误” .

public boolean arrayFront9(int[] nums) {
   if (nums.length < 4) {
    int counter = 0;
     while (counter != nums.length) {
      if (nums[counter] == 9) {
        return true;
      }else{
        counter = counter + 1;
      }
    } if (counter > nums.length) {
      return false;
    }
  }else{
    int counter = 0;
    while (counter <= 4) {
      if (nums[counter] == 9) {
        return true;
      }else{
       counter = counter + 1;
      } if (counter > 4) {
        return false;
      }
    }
  }
}

`

我知道我必须确保无论什么代码都必须有一些返回值,但是考虑到 if 和 else 语句,数组的长度要么小于 4,要么大于或等于 4,所以无论呈现什么数组,它都应该输入这些条件之一?

【问题讨论】:

  • 您的所有返回都在 if 语句中,并且编译器已确定您有可能没有返回任何内容的潜在逻辑路径。在方法的末尾添加一个默认的返回语句。
  • Java 不会查看 while/if 的条件来查看它们可能编译多少次。它只知道“一个while循环可能执行0-N次”等等。

标签: java


【解决方案1】:

试试这个

public boolean arrayFront9(int[] nums) {
        boolean result = false;
           if (nums.length < 4) {
            int counter = 0;
                while (counter != nums.length) {
                      if (nums[counter] == 9) {
                          result= true;
                        return result;
                      }else{
                        counter = counter + 1;
                      }
                } 

                if (counter > nums.length) {
                     result= false;
                        return result;
                    }
          } else{
                int counter = 0;
                    while (counter <= 4) {
                      if (nums[counter] == 9) {
                          result= true;
                            return result;
                          }
                      else{
                       counter = counter + 1;
                      } 
                    if (counter > 4) {
                        result= false;
                        return result;
                  }
                }
              }
        return result;
        }

实际上,您并没有在方法中返回任何内容,而是在 if/else 中。

【讨论】:

    【解决方案2】:

    正如评论所说,您的代码路径之一没有返回值。

    这要简单得多。

    public boolean containsNine()
    {
        int maxCount = array.length < 4 ? array.length : 4;
    
        for (int i = 0; i < maxCount; i++)
        {
            if (array[i] == 9)
            {
                return true;
            }
        }
    
        return false;   
    }
    

    【讨论】:

      猜你喜欢
      • 2021-04-08
      • 1970-01-01
      • 2016-06-23
      • 2012-10-04
      • 2013-07-11
      • 2011-03-30
      • 2016-03-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多