我的代码有什么问题?有人能帮我吗
what is wrong in my code? Can someone help me
public class BinarySearch {
public static void main(String[] args) {
int[] arr = {10,20,30,40,50,60,70,80};
int index = search(arr,80,0,arr.length-1);
if(index == -1) {
System.out.println("element not found");
}
else {
System.out.println("element is present at index:"+index);
}
}
public static int search(int[] arr,int x,int start, int end) {
if(start>end) {
return -1;
}
int mid = (int)(Math.floor(start+end)/2);
if(arr[mid]==x) {
return mid;
}
else if(arr[mid]>x) {
search(arr,x,start, (mid-1));
}
else {
search(arr,x, (mid+1),arr.length-1);
}
return -1;
}
}
正如我们所看到的,我正在搜索 80 并且我的代码正在命中语句 return mid;但程序仍然是 returning -1。
有人可以告诉我这里做错了什么吗?
如前所述,您缺少 return 语句,并且通过忽略所有 returned 值,您还需要使用 end
而不是 else 中的数组长度声明这样做:
else if(arr[mid] > x)
{
return search(arr, x, start, (mid - 1));
} else {
return search(arr, x, (mid + 1), end);
}
还有一个更好的计算中间值的方法是:
int mid = start + (end - start) / 2;
为了避免整数溢出。
public class BinarySearch {
public static void main(String[] args) {
int[] arr = {10,20,30,40,50,60,70,80};
int index = search(arr,80,0,arr.length-1);
if(index == -1) {
System.out.println("element not found");
}
else {
System.out.println("element is present at index:"+index);
}
}
public static int search(int[] arr,int x,int start, int end) {
if(start>end) {
return -1;
}
int mid = (int)(Math.floor(start+end)/2);
if(arr[mid]==x) {
return mid;
}
else if(arr[mid]>x) {
search(arr,x,start, (mid-1));
}
else {
search(arr,x, (mid+1),arr.length-1);
}
return -1;
}
}
正如我们所看到的,我正在搜索 80 并且我的代码正在命中语句 return mid;但程序仍然是 returning -1。 有人可以告诉我这里做错了什么吗?
如前所述,您缺少 return 语句,并且通过忽略所有 returned 值,您还需要使用 end
而不是 else 中的数组长度声明这样做:
else if(arr[mid] > x)
{
return search(arr, x, start, (mid - 1));
} else {
return search(arr, x, (mid + 1), end);
}
还有一个更好的计算中间值的方法是:
int mid = start + (end - start) / 2;
为了避免整数溢出。