2013-02-21 79 views
1

https://www.dropbox.com/s/5iklxvhslh4kfe7/CS%203114.zipJava的學校項目隨機誤差

有一個在我的代碼爲我的,我只是想不通學校項目的一些bug。上面的鏈接是我的項目代碼。項目說明位於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循環更新一次反應的燒成時間,而第二個for循環使用我的表更新特定相關的反應。我的答案對於第一個循環是正確的,但在使用第二個循環時不正確。我已經測試過,看看哪些傾向會改變,如果我更新每個反應的射擊時間並且結果與我的表相匹配。這意味着唯一的區別是-Math.log(Math.random())因子。如果我將隨機數設置爲常量,則使用兩個循環得到相同的結果。我已經多次查看過我的代碼,但我無法弄清楚問題所在。誰能幫我嗎?

P.S .: .ltf文件只是.txt文件,它們相當大。我用的是.ltf從常規的.txt文件區分

的二聚體例如正確的方法是:〜650〜650〜220

編輯:第三個循環只是用於調試目的。我說的2個循環是第一個和第二個循環,其中第一個循環被註釋掉了。

回答

0

在第一次循環中,您不需要table[reactionIndex]。只需使用table.length-1,並且您可以使用i作爲索引中的位置來循環和執行任務。