我正在研究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);
}
我应该怎么解决这个问题?
当您在块中声明变量时,无法从块外访问它,您应该从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
问题是您在else里面声明了它,这立即超出范围,并且值丢失了
您可以通过在该范围之外(在if语句之前)声明它或通过删除else来避免该问题
if(low>high)
return false;
int mid=(low + high )/2;
删除此处的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);
}
您在这里犯了两个错误。
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);
}