我收到此错误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);
}
}
知道是什么导致了这个错误以及如何修复它?我注意到我一直都是0,我不应该每次都计算它。
编辑:好的,现在我只得到一个IndexOutOfBoundsException。虽然我实际上没有改变任何东西所以我有点困惑。不知怎的,虽然我不知道如何,数学出错了。如果您知道逻辑错误是什么,请告诉我,否则我只需要解决它。我知道这个例外的交易是什么。
答案 0 :(得分:-2)
我认为你一直得到0的原因是因为if条件。您正在检查数组长度小于4的条件,如果是,则再次调用该函数。数组的值是否完全改变了?
为每个运行的进程用Java分配线程。您正在重复调用您的函数,因此可以安全地假设每次都分配一个新线程。由于线程池中的线程数量有限,因此可能会导致错误,因为递归永远不会被破坏。如果我忽略了数组值被更改的事实请忽略这一点。 :)