二进制搜索必须 return 一个值,尽管一个值是 returned
Binary search must return a value, though a value is returned
我的任务是使用递归在 Java 中创建二进制搜索。但是,即使我指定了 return 值,它仍然告诉我我必须 return 一个 int 结果。以下是我的代码的相关部分:
我尝试在 if-else 语句之外添加一个 return,结果却收到 WhosebugError。
result = binarySearch(numbers, 0, numbers.length-1, search);
if(result==-1)
System.out.println("Value not found.");
else
System.out.println(search + " was found at index " + result);
}
public static int binarySearch(int n[], int f, int l, int val) {
if(f>l)
return -1;
else {
int mid = (f+l)/2;
if(val == mid)
return n[mid];
else {
if(val < mid)
binarySearch(n, f, mid-1, val);
if(val > mid)
binarySearch(n, f, mid+1, val);
}
}
}
我预期如下:从用户收集值 search 并传递到 binarySearch 方法。然后 binarySearch 方法应从起始值 0 到最终值搜索我的 int 数组 numbers 以找到该值。在 binarySearch 方法中,我相信我的逻辑是正确的。当初始低值大于初始高值时,表示搜索完成,没有找到结果,所以return-1。否则,该项目在数组中,因此创建一个值 mid 来设置搜索的中间位置。如果要搜索的值等于 middle,return 找到它的索引。如果该值小于中间值,则减少高值并运行再次搜索,因为数字必须在中间的左边。如果该值大于中间值,则增加它并 re运行 因为它必须在右边。我对此的理解是否正确?为什么它无法识别 if-else 语句中的 return?
如有任何帮助,我们将不胜感激。谢谢
逻辑是正确的,你只需要在递归完成后return,把比较val
和mid
的两个替换成if/else。修改后的递归函数是这样的:
public static int binarySearch(int n[], int f, int l, int val) {
if(f>l){
return -1;
} else {
int mid = (f+l)/2;
if(val == mid) {
return n[mid];
} else {
if(val < mid) {
return binarySearch(n, f, mid-1, val);
} else {
return binarySearch(n, mid+1, l, val);
}
}
}
}
比较 val 与 n[mid],而不是 mid。
我的任务是使用递归在 Java 中创建二进制搜索。但是,即使我指定了 return 值,它仍然告诉我我必须 return 一个 int 结果。以下是我的代码的相关部分:
我尝试在 if-else 语句之外添加一个 return,结果却收到 WhosebugError。
result = binarySearch(numbers, 0, numbers.length-1, search);
if(result==-1)
System.out.println("Value not found.");
else
System.out.println(search + " was found at index " + result);
}
public static int binarySearch(int n[], int f, int l, int val) {
if(f>l)
return -1;
else {
int mid = (f+l)/2;
if(val == mid)
return n[mid];
else {
if(val < mid)
binarySearch(n, f, mid-1, val);
if(val > mid)
binarySearch(n, f, mid+1, val);
}
}
}
我预期如下:从用户收集值 search 并传递到 binarySearch 方法。然后 binarySearch 方法应从起始值 0 到最终值搜索我的 int 数组 numbers 以找到该值。在 binarySearch 方法中,我相信我的逻辑是正确的。当初始低值大于初始高值时,表示搜索完成,没有找到结果,所以return-1。否则,该项目在数组中,因此创建一个值 mid 来设置搜索的中间位置。如果要搜索的值等于 middle,return 找到它的索引。如果该值小于中间值,则减少高值并运行再次搜索,因为数字必须在中间的左边。如果该值大于中间值,则增加它并 re运行 因为它必须在右边。我对此的理解是否正确?为什么它无法识别 if-else 语句中的 return?
如有任何帮助,我们将不胜感激。谢谢
逻辑是正确的,你只需要在递归完成后return,把比较val
和mid
的两个替换成if/else。修改后的递归函数是这样的:
public static int binarySearch(int n[], int f, int l, int val) {
if(f>l){
return -1;
} else {
int mid = (f+l)/2;
if(val == mid) {
return n[mid];
} else {
if(val < mid) {
return binarySearch(n, f, mid-1, val);
} else {
return binarySearch(n, mid+1, l, val);
}
}
}
}
比较 val 与 n[mid],而不是 mid。