Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正在抛出Thread.dispatchUncaughtException,但我没有';我没有线_Java - Fatal编程技术网

Java 正在抛出Thread.dispatchUncaughtException,但我没有';我没有线

Java 正在抛出Thread.dispatchUncaughtException,但我没有';我没有线,java,Java,我收到了这个错误dispatchUncaughtException,我不知道这意味着什么,谷歌在回答它是什么方面效果不佳。在我为递归插值搜索编写的一些代码的第一次运行中,我始终能得到它 public static int interpolationSearch(int[] array, int target) { if (array.length < 4) return sequentialSearch(array, target); else {

我收到了这个错误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);
    }
}
公共静态int插值搜索(int[]数组,int目标){
if(数组长度<4)
返回顺序搜索(数组、目标);
否则{
long numLeft=目标-数组[0];
long numRight=array.length-1;
长分子=numLeft*numRight;
长分母=数组[array.length-1]-数组[0];
int i=(int)数学下限(分子/分母);
//inti=(int)Math.floor(((target-array[0])*(array.length-1))/(array[array.length-1]-array[0]);
if(target==array[i])//中心点是答案
返回i;
if(target
知道是什么导致了这个错误以及如何修复它吗?我已经注意到,对于I,我总是得到0,而不是每次它发生时,我的计算都应该得到0


编辑:好吧,现在我只得到一个IndexOutOfBoundsException。虽然我没有改变任何事情,所以我有点困惑。虽然我不知道怎么算,但不知怎么算出来的数学是错的。如果你知道逻辑错误是什么,请告诉我,否则我就得解决它。我知道这个例外情况下的交易是什么。

我认为你一直得到0的原因是因为if条件。您正在检查数组长度是否小于4,如果小于4,则再次调用该函数。数组的值是否正在更改


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

包括所获得错误的堆栈跟踪。此外,Java程序中始终至少有一个线程。-1第二段完全错误。你似乎误解了线程是什么。