在使用递归进行二进制搜索编码时,我遇到了一些疑问



当仅使用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);
}
}
}

编译器无法猜测最后一个if条件将始终为true。因此,您必须提供一个返回值,以防它为false。即使它永远不会发生。你甚至可以去掉最后一个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);
}
return binarySearch(arr,x,mid+1,ei);
}

}

当一个方法的签名中有返回类型时,应该在所有条件下从该方法返回一些东西。这种检查是在Java的编译时进行的。

当您在代码中逻辑地使用if时,该条件可以是true或false。如果这是真的,那么该方法将从If块返回一些东西。但若条件为false,则方法将不会返回任何内容(因为if条件中的代码未执行(。所以在这种情况下,当if条件的结果为false时,方法需要返回一些默认值。从第一种方法开始,如果条件如

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(一起使用,然后条件when 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条件为true,则返回CCD_ 1。如果arr[mid]>x为真,则返回binarySearch(arr,x,si,mid-1);结果。如果两者都是真的,那么其他人总是会在那里返回一些东西(在您的情况下为binarySearch(arr,x,mid+1,ei);(。

因为第二个方法的所有可能结果都会返回一些东西。您总是需要确保,当您的方法不是void时。

在第一种情况下,当三个if语句的条件都不是true时,您需要为该情况指定返回值。

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);
} 

然而,很明显,当以上所有条件都是false时,您永远不会面临这样的情况,但编译器无法解决这一问题,因此您需要以这种方式设计代码,在这种情况下,编译器将知道在所有可能的条件下,您的方法都将返回值。因此,第二种实现方式更为";"干净";并对进行逻辑校正

您已经将返回类型设置为int。当您使用if语句时,不能保证其中一个if语句必须工作,并且您将获得返回值。

if()
{
return value;
}
if()
{
return value;
}

在上面的代码中,如果条件不满足,两个if都可以工作,或者两个都不能工作。因此,我们可能不会得到一个返回值。

在其他情况下,如果,其他情况下我们有保证,其中一个情况肯定会起作用,我们将获得100%的回报值

if()
{
return value;
}
else if()
{
return value;
}
else{
return value;
}

在上面的代码中,只有一个if条件可以工作,我们总是会得到一个返回值。

相关内容

最新更新