
本文旨在帮助开发者解决在Java中实现二分查找时遇到的 “
理解 “ expected” 错误
Java编译器报错 “
public static int search(num, target_value)
编译器期望在这里看到参数的类型,例如 int[] num 和 int target_value。
正确的 search 方法声明
要修复此错误,需要为 search 方法的参数指定类型。正确的声明应如下所示:
public static int search(int[] num, int target_value)
这里,int[] num 表示 num 是一个整数数组,而 int target_value 表示 target_value 是一个整数。
完整的二分查找代码示例
下面是一个完整的二分查找代码示例,其中包含了正确的 search 方法声明和一些改进:
public class BinarySearch {
public static int search(int[] num, int target_value) {
int low = 0;
int high = num.length - 1;
int mid;
while (low <= high) { // 修改循环条件,确保覆盖所有情况
mid = low + (high - low) / 2; // 防止 (low + high) 溢出
if (num[mid] == target_value) {
return mid;
}
if (num[mid] < target_value) {
low = mid + 1;
} else {
high = mid - 1;
}
}
return -1; // 如果未找到,返回 -1
}
public static void main(String[] args) {
int target_value = 69;
int[] num = {10, 11, 23, 45, 69, 81}; // 数组需要排序
int result = search(num, target_value);
if (result == -1) {
System.out.println("Element not present");
} else {
System.out.println("Element is present at index: " + result); // 打印正确的索引
}
}
}代码解释:
- search(int[] num, int target_value): 接受一个整数数组 num 和目标值 target_value 作为输入。
- low 和 high: 分别表示搜索范围的下界和上界。
- mid = low + (high - low) / 2;: 计算中间索引。 这种计算 mid 的方式可以有效防止 (low + high) 溢出的情况。
- while (low 循环条件,确保在 low 等于 high 时也进行检查。
- if (num[mid] == target_value): 如果中间元素等于目标值,则返回中间索引。
- if (num[mid] 如果中间元素小于目标值,则将下界设置为 mid + 1。
- else: 否则,将上界设置为 mid - 1。
- return -1;: 如果在数组中未找到目标值,则返回 -1。
注意事项和总结
- 二分查找的前提: 二分查找只能用于已排序的数组。 如果数组未排序,需要先对其进行排序。
- 边界条件: 注意循环条件 low
- 溢出问题: 计算 mid 时,使用 low + (high - low) / 2 可以防止 (low + high) 溢出。
- 返回值: 如果未找到目标值,返回 -1 是一个常见的约定。
- 静态方法调用: 因为 search 方法是静态的,可以直接通过类名调用,无需创建对象。
通过理解 “










