1

https://www.dropbox.com/s/5iklxvhslh4kfe7/CS%203114.zip

学校のプロジェクトのコードに、理解できないバグがいくつかあります。上記のリンクは、プロジェクトの私のコードへのリンクです。プロジェクトの説明はP1.pdfファイルにあります。

私のエラーはこのコードと関係があります:

                /*
                for (int i = 0; i < reactions.length; i++)
                {
                    reactions[i].UpdateFireTime();
                    debugwriter.write(i + "| " + reactions[i].FireTime());
                    debugwriter.newLine();
                }
                debugwriter.newLine();
                heap.build();
                //*/

                //*
                for (int i = 0; i < table[reactionIndex].length; i++)
                {
                    int rindex = table[reactionIndex][i];
                    reactions[rindex].UpdateFireTime();
                }
                for(int i = 0; i < reactions.length; i++)
                {
                    debugwriter.write(i + "| " + reactions[i].FireTime());
                    debugwriter.newLine();
                }
                debugwriter.newLine();
                heap.build();

                //*/

最初のforループはすべての反応の起動時間を更新し、2番目のforループは私のテーブルを使用して特定の依存反応を更新します。私の答えは最初のforループでは正しいですが、2番目のforループを使用すると正しくありません。すべての反応の発火時間を更新し、結果が私のテーブルと一致する場合、どの傾向が変化するかを確認するためにテストしました。これは、唯一の違いが-Math.log(Math.random())係数であることを意味します。乱数を定数に設定すると、両方のループを使用して同じ結果が得られます。私は自分のコードを何度も調べましたが、問題が何であるかを理解できません。誰かが私を助けることができますか?

PS:.ltfファイルは、非常に大きな.txtファイルです。.ltfを使用して、通常の.txtファイルと区別します

DIMERの例の正しい手段は次のとおりです。〜650〜650〜220

編集:3番目のループはデバッグ目的のためだけです。私が話している2つのループは、1番目と2番目のループで、1番目のループはコメントアウトされたループです。

4

1 に答える 1

0

table[reactionIndex]最初のループでは必要ありません。使用するだけで、インデックス内のスポットとしてtable.length-1使用iして、ループして何かを行うことができます。

于 2013-02-21T18:43:24.080 に答える