这段代码的方法有什么问题?

时间:2017-11-02 02:46:18

标签: java

如果代码中提供的方法正确或缺少某些内容,我有一定的疑问。代码运行正常但我仍然认为该方法不适合。它似乎有一个bug。这是代码:

// Java  program to find an element x in a
// sorted array using Exponential search.

import java.util.Arrays;

class Test
{
    // Returns position of first ocurrence of
    // x in array
    static int exponentialSearch(int arr[], int n, int x)
    {
        // If x is present at firt location itself
        if (arr[0] == x)
            return 0;

        // Find range for binary search by
        // repeated doubling
        int i = 1;
        while (i < n && arr[i] <= x)
            i = i*2;

        // Call binary search for the found range.
        return Arrays.binarySearch(arr, i/2, Math.min(i, n), x);
    }

    // Driver method
    public static void main(String args[])
    {
        int arr[] = {2, 3, 4, 10, 40};
        int x = 10;
        int result = exponentialSearch(arr, arr.length, x);

        System.out.println((result < 0) ? "Element is not present in array" :
                                "Element is present at index " + result);
    }
}

这是返回类的方法。我错过了一些定义吗?

1 个答案:

答案 0 :(得分:0)

您的difference()方法基本上是逻辑正确的。它将创建一个新的OrdSetSimple,其中s1中的元素不在s2中。

但是,请看下面的例子。

s1 = [2, 3, 5]
s2 = [3]

结果集

result = [2, 5]

您可以看到结果的大小为2,而s2的大小为1。

从代码中,将结果集的大小设置为s2的大小。

OrdSetSimple set = new OrdSetSimple(size2);

可能导致无法将所有结果元素添加到结果中。

尝试将代码更改为

OrdSetSimple set = new OrdSetSimple(size1);

使用s1的大小,因为结果集的大小应该等于或小于s1。