0

学校の課題のための単純な Java プログラムでは、スレッドを使用しませんでした (Java がスレッドを使用するようにコードを最適化しない限り)。なぜそれは私がするときです

java App < test.txt // correct result
java App < test.txt > ans.txt // 1 wrong result

次に、ArrayList の使用を Vector に切り替えると、機能します。唯一の違いは同期だと思いますか?スレッドを使用しない場合、異なる結果が得られるのはなぜですか? また、間違った結果のトリガーは> ans.txt、出力リダイレクトですか? しかし、以前に、いくつかの println を追加したときと none を追加したときに異なる結果が得られたといういくつかの奇妙な点にも気付きました。

どうしてこれなの?スレッドを使用しない場合、ArrayList/Vector から同じ結果が得られると思いますか? 思った通りにArrayListを使っていたのですが、スレッドを使っていないのでArrayListで済まされるのでしょうか?

アップデート

コードはhttps://gist.github.com/3720606です。ちょうど試して:

java SchedulingDeliveries < Subtask1.txt // should give wrong result

予想される答えは Subtask1-ans.txt です。それで diff ans.txt を試すことができます

次に、ArrayList を検索して Vector に置き換えてから、もう一度試してください。動作するはずです

4

1 に答える 1

0

ArrayMaxHeap の実装について (コードを調べて、起こっていると思われることと比較して答えてください):

  • listdequeue()呼び出されるとのサイズはどうなりますか?

  • dequeue要素を配列内の最後の位置から「最初」に移動し (インデックス 0 はカウントしない)、次に を呼び出しますshiftDown(1)queueIndex移動shiftDownした要素が何らかの理由で別の要素と交換されない場合 (最後の要素かもしれません) はどうなりますか?

于 2012-09-14T08:38:27.120 に答える