0

ブロックがなくても機能しますが、ブロックif delay == 2では機能しません。

ForkJoin の計算は次のとおりです。

compute() {

    if(lastElem - firstElem == 1)
        return array[firstElem];

    if(lastElem - firstElem == 2){

        if(array[firstElem] > array[lastElem])
            return array[firstElem];
        else
            return array[lastElem];
    }

    int midElem = (firstElem + lastElem) / 2;

    MyForkJoinTask left = new MyForkJoinTask(array, firstElem, midElem);
    MyForkJoinTask right = new MyForkJoinTask(array, midElem, lastElem);

    left.fork();
    right.fork();

    int leftResult = left.join();
    int rightResult = right.join();

    if(leftResult > rightResult)
        return leftResult;
    else
        return rightResult;


}

これが私の主な方法です:

main(String[] args) {
    Random r = new Random();
    for(int i = 0; i < array.length; i++){
        array[i] = r.nextInt();
    }
    MyForkJoinTask root = new MyForkJoinTask(array);
    F_J_POOL.submit(root);
    System.out.println("Result is " + root.join());
}

短いエラー:

スレッド「メイン」での例外 java.lang.ArrayIndexOutOfBoundsException

at com.bg.fork_join.MainFJ.main(MainFJ.java:24) 原因: java.lang.ArrayIndexOutOfBoundsException ... 15 詳細

原因: java.lang.ArrayIndexOutOfBoundsException: 10000 at com.bg.fork_join.MyForkJoinTask.compute(MyForkJoinTask.java:31)

どこに問題があるのか​​教えていただけますか?

4

1 に答える 1

1

については何も知りませんForkJoinが、これは一般的な原則だけでは疑わしいようです。

if(lastElem - firstElem == 2){

    if(array[firstElem] > array[lastElem])
        return array[firstElem];
    else
        return array[lastElem];
}

コードの残りの部分は、firstElem(inclusive) からlastElem( exclusivelastElem-1 ) までの部分配列を処理しているように見えるので、インデックスに使用するべきではありませんか?

于 2014-04-04T16:48:16.693 に答える