java - 在使用递归进行二进制搜索编码时,我遇到了一些疑问
问题描述
仅当使用if 时,我必须返回一些整数
public class solution {
public static int binarySearch(int arr[], int x,int si,int ei){
if(si>ei){
return -1;
}
int mid=(si+ei)/2;
if(arr[mid]==x){
return mid;
}
if(arr[mid]>x){
return binarySearch(arr,x,si,mid-1);
}
if(arr[mid]<x){
return binarySearch(arr,x,mid+1,ei);
}
return 0;
}
}
但是当使用if-else-if 时,我不必返回任何整数,为什么?
public class solution {
public static int binarySearch(int arr[], int x,int si,int ei){
if(si>ei){
return -1;
}
int mid=(si+ei)/2;
if(arr[mid]==x){
return mid;
}
else if(arr[mid]>x){
return binarySearch(arr,x,si,mid-1);
}
else {
return binarySearch(arr,x,mid+1,ei);
}
}
}
解决方案
当一个方法在签名中有返回类型时,应该在所有条件下从该方法返回一些东西。并且该检查是在 Java 的编译时进行的。
当您在代码中逻辑地使用if时,该条件可以为真或假。如果这是真的,该方法将从 if 块返回一些东西。但是如果条件为假,方法将不会返回任何东西(因为 if 条件中的代码未执行)。因此,在这种情况下,如果条件结果为假,则方法需要默认返回一些东西。从第一种方法如果所有条件都像
if(si>ei){
return -1;
}
int mid=(si+ei)/2;
if(arr[mid]==x){
return mid;
}
if(arr[mid]>x){
return binarySearch(arr,x,si,mid-1);
}
if(arr[mid]<x){
return binarySearch(arr,x,mid+1,ei);
}
是假的。方法不会返回任何东西。
另一方面,当您将else 与 if 一起使用(天气是 if-else 或 if-elseIf-else)时,如果 if 为 false(或 elseIf 为 false),则 else 部分将从方法返回一些内容。所以总会有一些东西可以从方法中返回。在第二种方法中
if(arr[mid]==x){
return mid;
}
else if(arr[mid]>x){
return binarySearch(arr,x,si,mid-1);
}
else
return binarySearch(arr,x,mid+1,ei);
}
如果第一个 if 条件为真mid
,则返回。如果arr[mid]>x
为真binarySearch(arr,x,si,mid-1);
,将返回结果。如果两者都为真,否则将永远在那里返回一些东西(在你的情况下binarySearch(arr,x,mid+1,ei);
)。
推荐阅读
- python - 实时将控制台输出重定向到 pyqt5 gui
- java - 从 Splunk 中的列表进行统计
- html - 银行系统日志问题,记录操作的负载数,用于跟踪贷款在其生命周期内
- dart - 冻结包中是否有任何“初始化程序列表”?
- spring-boot - 我怎样才能找到两个价格区间之间的产品,
- css - Ant Design 图标未对齐/居中
- c++ - 如果第二个参数是右值,则重载 != 运算符不起作用
- android - 通过Android 11上的存储访问框架将文件从应用程序特定的外部存储移动到用户选择的目录?
- jquery - 使用 Laravel 和 jQuery AJAX 在模态中显示特定的数组图像
- flutter - 有没有办法检查后期变量是否已初始化