无法找出逻辑错误

Having trouble picking out logic error

我只是在用一个 int 数组练习二分查找,不太明白为什么我的逻辑不对。我已经跟踪了我的代码,所有这些都加起来了。但是代码编译得很好;我缺少一些逻辑。我可以让额外的眼睛追踪我的小片段吗?

我认为我不需要那个 return 0;但是如果没有 return 之外我就无法编译我的代码。

public static void main (String[] args)
    {
        int[] data = new int[]{5,10,15,20,25,30,35,40,45,50,55,60};
        int first = 0;
        int last = data.length;
        int target = 55;
        System.out.print(BinarySearch(data,first,last,target));
    }
    public static int BinarySearch(int[] data, int first, int last,int target)
    {
        if(first > last)
            return -1;
        else{
            int middle = (first+last)/2;
            if(target == data[middle])
                return data[middle];
            else if(target < data[middle])
                BinarySearch(data,first,middle-1,target);
            else
                BinarySearch(data,middle+1,last,target);
        }
      return 0;
    }

您忽略了递归调用的结果。

Return 递归调用的结果。

return BinarySearch(data,first,middle-1,target);

return BinarySearch(data,middle+1,last,target);

那末尾的return 0;就可以去掉了;现在是无法访问的代码。

此外,如果 returns 它找到 target 的位置的索引,您的 BinarySearch 方法将更有用,例如return middle; 而不是 return data[middle].

要避免在搜索 target 时出现 ArrayIndexOutOfBoundsException,请将 data.length - 1 分配给 last,而不是 data.length。初始firstlast必须是最小可能索引和最大可能索引。