1

この問題に頭を悩ませているだけです。どんな助けでも大歓迎です。

プログラムは、各入力数値の除数の合計を計算するテキスト ファイルを読み取る必要があります。たとえば、数値 20 の合計は 1+2+4+5+10=22 です。次に、これらの合計が行ごとに合計されます。次に、除数を超えるこれらの合計のそれぞれについて見つけ、最後にそれらを合計します。

例 初期ファイル 1 2 4 6 15 20

25 50 100 125 250 500

16 8 3

次に、除数の合計を計算します。

1 1 3 6 9 22

6 43 117 31 218 592

15 7 1

行ごとにまとめた

42

1007

23

次に、上記の合計が計算されます。

54

73

1

そして、最終的に合計して戻ってきました。

128

スレッドプールによって新しい行が完了するたびにプロセスを完了する必要があります。

私の論理は次のとおりです。

              5.2. For each input line (Add each line to an ArrayBlockingQueue, 
Then add each item in the Queue to an ExecutorService Which will run the follow)   

               5.2.1. Parse the current input line into integers 

               5.2.2. For each integer in the current input line 

                   5.2.2.1. Compute the sum-of-divisors of this integer 

                   5.2.2.2. Add this to the cumulated sum-of-divisors 

               5.2.3. Compute the sum-of-divisors of this cumulated sum

               5.2.4. Add this to the grand total

5.2 の後で行き詰まりました。実行可能なインターフェイスを実装する新しいクラスを作成し、累積合計をatomicArray に追加するか、呼び出し可能なインターフェイスを実装するクラスを作成し、累積合計を返すようにするのが最善ですか? または、まったく異なる方法があります。

これは私がこれまでに持っていたもので、目的の結果を返しますが、連続した問題です。

http://pastebin.com/AyB58fpr

4

2 に答える 2

1

使用する

java.util.concurrent.Future

そして

java.util.concurrent.Executors.newFixedThreadPool(int nThreads)

これは非常に簡単です。

Executor に慣れていない場合は、 Oracle のチュートリアルに従ってください。

于 2012-05-09T08:38:57.520 に答える
1

Callable入力を処理するコードと出力の収集方法との依存関係が作成されないため、私はインターフェイスを好みます。

通常のアプローチは、 のリストにタスクを集めることですFuture例については、この回答を参照してください。

于 2012-05-09T08:39:31.867 に答える