无法找出逻辑错误
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
。初始first
和last
必须是最小可能索引和最大可能索引。
我只是在用一个 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
。初始first
和last
必须是最小可能索引和最大可能索引。