BinarySearch中的变量声明

问题描述 投票:0回答:4

我正在研究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);


    }

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

java recursion binary binary-search
4个回答
1
投票

当您在块中声明变量时,无法从块外访问它,您应该从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


0
投票

问题是您在else里面声明了它,这立即超出范围,并且值丢失了

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

if(low>high)
    return false;
int mid=(low + high )/2;

0
投票

删除此处的else条件是更新的代码:

public static boolean binarySearch(int[] data, int target, int low, int high){
    if(low>high)
        return false;
    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);


}

0
投票

您在这里犯了两个错误。

  • 首先,您必须在开头声明中间变量,因为它也在其他范围内使用(不仅在其他范围内。)>
  • 第二个是您必须在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); }

© www.soinside.com 2019 - 2024. All rights reserved.