如何修复“此方法必须返回布尔类型”错误

时间:2018-02-25 14:59:29

标签: java arrays data-structures

我为一个方法编写了以下代码,该方法应该删除数组中给定元素的所有出现并将其余元素向前移动t。我一直得到编译错误“这个方法必须返回布尔类型”,即使我已经返回布尔值。我之前也遇到过这个问题,但几天后运行代码后,它就运行了。

我的代码确实有问题吗?

public static boolean removeAll(int [] arr, int size, int elem){
    int count=0;
    for(int i=0;i<size;i++){
      if(arr[i]==elem){
        count++;
        for(int j=i;j<size;j++){
          arr[j]=arr[j+1];
        }
        System.out.println("Number of elements after insertion: "+(size-count));
        return true;
      }
      }
    if(count==0){
      return false;
    }
  }

3 个答案:

答案 0 :(得分:1)

明显的错误是,当count非零时,您的方法不会返回任何内容。您甚至不需要条件 - 只需改为使用return count != 0

但是,您的代码中还有其他更微妙的错误:

  • 不要将数组长度与数组一起使用。您可以致电arr.length()
  • 获取长度
  • 返回boolean不足以让调用者对修改后的数组执行任何操作。您需要返回剩余的长度。
  • 您的代码是O(n 2 ),因为它会在每次删除时不断复制数组的“尾部”部分。这个任务可以通过维护两个索引在O(n)中完成 - 一个用于读取,一个用于写入数据。

答案 1 :(得分:0)

返回需要与功能块保持一致。你不需要“if(count == 0)”,因为如果java应用程序已经获得了该代码,则意味着计数肯定为零 - 代码停止并在增加计数器的同一块中返回true。

public static boolean removeAll(int [] arr, int size, int elem){
    int count=0;
    for(int i=0;i<size;i++){
        if(arr[i]==elem){
            count++;
            for(int j=i;j<size;j++){
                arr[j]=arr[j+1];
            }
            System.out.println("Number of elements after insertion: "+(size-count));
            return true;
        }
    }
    return false;
}

但是,此代码只会从数组中删除一个元素,然后因为返回true而停止。我不确定这是不是你想要的。

答案 2 :(得分:0)

编译器抱怨,因为代码必须的每个逻辑“路由”都返回一个布尔值。

这意味着您现在必须检查所有代码的路径。当最后if内的条件为假时会发生什么? (当count与0不同时?)。

目前没有(或者更准确地说,您可以查看编译器放置的隐式return;,如果您的函数的返回类型为void,则只能使用它。

注意:在简单条件之后返回布尔值时,在返回中直接写入条件实际上更简洁。即:

 return count != 0;