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 循环更新每个反应的触发时间,而第二个 for 循环使用我的表来更新特定的相关反应。我的答案对于第一个 for 循环是正确的,但在我使用第二个循环时不正确。如果我更新每个反应触发时间并且结果与我的表匹配,我已经测试过哪些倾向会发生变化。这意味着唯一的区别是 -Math.log(Math.random()) 因子。如果我将随机数设置为常数,那么使用两个循环都会得到相同的结果。我已经多次查看我的代码,但我无法弄清楚问题可能是什么。谁能帮我吗?
PS:.ltf 文件只是 .txt 文件,非常大。我使用 .ltf 将它们与常规 .txt 文件区分开来
DIMER 示例的正确方法是:~650 ~650 ~220
编辑:第三个循环仅用于调试目的。我正在谈论的 2 个循环是第一个和第二个循环,其中第一个是被注释掉的循环。