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 に答える