簡體   English   中英

無法找出邏輯錯誤

[英]Having trouble picking out logic error

我只是在練習使用int數組進行二進制搜索,還不能完全弄清為什么我的邏輯不正確。 我已經跟蹤了我的代碼,這一切都加給了我。 但是代碼可以很好地編譯; 我缺少一些邏輯。 我能否再多一雙眼睛追蹤我的小部分?

我認為我不需要返回0; 但是我無法在沒有其他回報的情況下編譯我的代碼。

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 BinarySearch(data,first,middle-1,target);

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

然后,您可以刪除return 0; 在末尾; 現在是無法訪問的代碼。

同樣,如果BinarySearch方法返回找到target的位置的索引,例如return middle;值,則它會更加有用return middle; 而不是return data[middle]

為了避免在搜索到太高的target時出現ArrayIndexOutOfBoundsExceptiondata.length - 1分配給last ,而不是data.length 最初的firstlast必須是最小可能索引和最大可能索引。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM