1

Routine オブジェクトの ArrayList があり、このメソッドを使用してタスクのさまざまなステータスを更新する必要があります

    while(!allRoutineComplete){
        for (Routine routine : routineList) {
            if(!(routine.isBlocked()) && !(routine.isFinished())) {
                routine.run();
                }
        }
        for (Routine routine : routineList) {
            routine.updateStatus();
            if(routine.isFinished()){
                completedRoutineNumber++;
            }
            if(completedRoutineNumber==routineList.size()){
                allRoutineComplete=true;
            }
        }
    }

残念ながら、allRoutineComplete私の実装のブール値は、すべてのルーチンが終了する前に true に設定されています。

私のコードで何が間違っていますか?

すべてのタスクの完了を効率的に確認するには?

4

2 に答える 2

2

最初のサイクルで、すべての Routine Complete チェックを移動する必要があります。移動しforないと、ルーチンが複数回ループを終了します。

これを使用してみてください:

while(!allRoutineComplete){
            for (Routine routine : routineList) {
                if(!(routine.isBlocked()) && !(routine.isFinished())) {
                    routine.run();
                    if(routine.isFinished()){
                        completedRoutineNumber++;
                    }
                    if(completedRoutineNumber==routineList.size()){
                    allRoutineComplete=true;
                    }
                }
            }
            for (Routine routine : routineList) {
                routine.updateStatus();
            }
}
于 2012-06-24T11:22:40.993 に答える
1

問題は、whileループの先頭でcompletedRoutineNumber=0を設定していないことだと思います。ルーチンのリスト全体を反復処理しているため、ルーチンの半分が完了し、whileループが2回以上実行されると、ルーチンの半分だけが完了したとしても、completedRoutineNumberは3回目はroutineList.size()を超えます。

于 2012-06-24T02:44:26.277 に答える