[英]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
時出現ArrayIndexOutOfBoundsException
, data.length - 1
分配給last
,而不是data.length
。 最初的first
和last
必須是最小可能索引和最大可能索引。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.