1

我收到了这个错误 dispatchUncaughtException ,我不知道这意味着什么,谷歌搜索在回答它是什么方面效果不佳。我总是在第一次运行我为递归插值搜索编写的一些代码时得到它。

public static int interpolationSearch(int[] array, int target) {
    if (array.length < 4)
        return sequentialSearch(array, target);
    else {
        long numLeft = target - array[0];
        long numRight = array.length - 1;
        long numerator = numLeft * numRight;
        long denominator = array[array.length - 1] - array[0];
        int i = (int) Math.floor(numerator / denominator);
        //int i = (int)Math.floor(((target - array[0])*(array.length - 1))/(array[array.length - 1] - array[0]));
        if (target == array[i]) //center point is answer
            return i;
        if (target < array[i]) //recurse on left side
            return interpolationSearch(Arrays.copyOfRange(array, 0, i),
                    target);
        //recurse on right side
        return i
                + interpolationSearch(
                        Arrays.copyOfRange(array, i, array.length), target);
    }
}

知道是什么导致了这个错误以及如何解决它吗?我注意到我一直在为 i 得到 0,每次发生这种情况时,我的计算都不应该是这样。

编辑:好的,所以现在我只得到一个 IndexOutOfBoundsException。虽然我实际上并没有改变任何东西,所以我有点困惑。尽管我不知道如何计算,但不知何故数学是错误的。如果你知道逻辑错误是什么,请告诉我,否则我只需要解决它。我知道这个例外是怎么回事。

4

1 回答 1

-2

我认为您始终获得 0 的原因是由于 if 条件。您正在检查数组长度小于 4 的情况,如果是,则再次调用该函数。数组的值是否发生了变化?

在 Java 中为每个运行的进程分配线程。您正在重复调用您的函数,因此可以安全地假设每次都分配了一个新线程。由于线程池中的线程数量有限,这可能会导致错误,因为递归永远不会中断。如果我忽略了数组值被更改的事实,请忽略这一点。:)

于 2013-02-25T05:07:16.890 回答