另一个数组的数组子集降序二分查找。这是我的代码。它总是打印 "false"

Array subset of another array descending order binary search. Here's my code. It always prints "false"

这是我需要的布尔方法

public static boolean isSubsetOf(int a[], int b[]){

for (int i=0;i<b.length;i++){
    if (binarySearch(a,0 ,a.length-1, b[i])==false) return false;
}
return true;
}

这是降序二分查找

private static boolean binarySearch(int[] a, int i, int j, int k) {
int mid;
if (i<=j){
    mid=(i+j)/2;
    if (a[mid]==k) return true;
    else if (a[mid]<k) binarySearch(a, i,j=mid-1, k);
    else binarySearch(a,i=mid+1,j,k);
}
return false;
}
}

您忽略了递归 binarySearch 调用的 return 值。

这是更正后的版本[请原谅不必要的样式清理]:

private static boolean
binarySearch(int[]a, int i, int j, int k)
{
    int mid;
    boolean match;

    if (i <= j) {
        mid = (i + j) / 2;

        if (a[mid] == k)
            return true;

        if (a[mid] < k)
            match = binarySearch(a, i, j = mid - 1, k));
        else
            match = binarySearch(a, i = mid + 1, j, k);
        if (match)
            return match;
    }

    return false;
}

但是,二分查找通常可以[更快]无需递归:

private static boolean
binarySearch(int[]a, int i, int j, int k)
{
    int mid;

    while (i <= j) {
        mid = (i + j) / 2;

        if (a[mid] == k)
            return true;

        if (a[mid] < k)
            j = mid - 1;
        else
            i = mid + 1;
    }

    return false;
}