BinarySearch 中的变量声明

Variable declaration in BinarySearch

我正在研究 java 项目 BinarySearch。我正在尝试创建并初始化一个变量 mid ,它将找出中间值,但它给我一个错误,你不能在这里声明一个变量。我也用 split 声明尝试过,但没有用。这是我的一段代码:

 public static boolean binarySearch(int[] data, int target, int low, int high){
        if(low>high)
            return false;
        else
            int mid=(low + high )/2;
        if(target==data[mid]);
            return true;
        else if(target<data[mid])
            return binarySearch(data, target, low, mid - 1);
        else
            return binarySearch(data, target, mid + 1, high);


    }

我应该怎么做才能解决这个问题?

问题是你在 else 中声明它,它立即超出范围并且值丢失

您可以通过在该范围之外声明它(在 if 语句之前)或删除 else

来避免该问题
if(low>high)
    return false;
int mid=(low + high )/2;

当你在一个块中声明一个变量时,你不能从块外访问它, 你应该从 if 中去除变量并在 if 中改变他, 然后,当您使用 target==data[mid] 访问它时,程序将知道从哪里获取它。 例如:

public static boolean binarySearch(int[] data, int target, int low, int high){
    int mid;
    if(low>high)
        return false;
    else
        mid=(low + high )/2;
    if(target==data[mid]);
        return true;
    else if(target<data[mid])
        return binarySearch(data, target, low, mid - 1);
    else
        return binarySearch(data, target, mid + 1, high);


}

有关变量作用域的更多信息: Scope of Variables In Java

你在这里犯了两个错误。

  • 首先你必须在开头声明 mid 变量,因为它也在其他范围内使用(不仅在 else 范围内)。
  • 第二个是你必须删除这里的分号 if(target==data[mid]);。因为它正在终止线路。

解决这些问题后的代码,

public static boolean binarySearch(int[] data, int target, int low, int high){
  int mid;
  if (low > high)
    return false;
  else
    mid = (low + high) / 2;
  if (target == data[mid])
    return true;
  else if (target < data[mid])
    return binarySearch(data, target, low, mid - 1);
  else
    return binarySearch(data, target, mid + 1, high);
}