Eclipse 给出关于不返回整数的错误

Eclipse giving an error about not returning an integer

下面的代码应该对卡片数组中的卡片进行递归二进制搜索。 Eclipse 给出一个错误,该方法没有 return 一个整数。

public static int binaryrSearch(Card[] cards, Card target , int low , int high)
{
    if (high<low)
    {
        return -1;
    }
    int mid = (low+high)/2;
    int comp = cards[mid].compareTo(target);
    if(comp==0)
    {
        return mid;
    }else if(comp<0)
    {
        return binaryrSearch(cards , target , mid+1 , high);
    }else if (comp>0)
    {
        return binaryrSearch(cards , target , low , mid-1);
    }
}

比较方法:

public int compareTo(Card that){
    if(this.suit<that.suit)
    {
        return -1;
    }
    if(this.suit>that.suit)
    {
        return 1;
    }
    if(this.rank<that.rank)
    {
        return -1;
    }
    if(this.rank>that.rank)
    {
        return 1;
    }
    return 0;
}

由于您的 if-else-if 语句涵盖了 compcomp==0comp<0comp>0)的所有可能值,您应该更改最后一个 else if :

else if (comp>0)

其他:

else

这样编译器会意识到你的方法总是returns一个值。

...
if (comp==0) {
    return mid;
} else if (comp<0) {
    return binaryrSearch(cards , target , mid+1 , high);
} else {
    return binaryrSearch(cards , target , low , mid-1);
}
...

尝试在 binaryrSearch 方法末尾添加 return 语句

public static int binaryrSearch(Card[] cards, Card target , int low , int high)
{
   ....
   ....
   return 0;
}

您必须在方法末尾添加一个return语句:

    public static int binaryrSearch(Card[] cards, Card target , int low , int high)
{
    if (high<low)
    {
        return -1;
    }
    int mid = (low+high)/2;
    int comp = cards[mid].compareTo(target);
    if(comp==0)
    {
        return mid;
    }else if(comp<0)
    {
        return binaryrSearch(cards , target , mid+1 , high);
    }else if (comp>0)
    {
        return binaryrSearch(cards , target , low , mid-1);
    }
   return 0;
}

两种方法,添加从未达到的 return 语句并删除最后一个(如果有效)。谢谢你们的即时帮助。