Skip to main content

Homework 2 Percolation FAQ

常见问题解答

如果 T 等于 1,stddev() 应该返回什么?

样本标准差未定义。我们建议返回 Double.NaN,但我们不会测试这种情况。

系统完成渗透后PercolationVisualizer 会将所有连接到底部开放站点的站点(以及连接到顶部开放站点的站点)都标记为浅蓝色。这种“回流现象”可以接受吗?

虽然允许回流现象不完全符合Percolation API的要求,但修复这个问题需要一定的技巧,而且即使不修复,也只会扣少量分数。

渗透

如何在 PercolationStats 中,在所有被阻塞的站点中均匀随机地生成一个站点?

随机选取一个位置(通过StdRandom或其他库生成两个0(含)到N(不含)之间的整数),如果该位置已被阻塞,则使用;否则,重复此过程。

当 N = 200 时,我在 PercolationStats 中无法获得可靠的计时信息。我该怎么办?

增加 N 的大小(例如,增加到 400、800 和 1600),直到平均运行时间超过其标准差。

我通过了所有其他测试,但卡方检验失败了。

问题在于您对多个模拟使用了相同的随机种子,并且统计测试发现了它们是相同的事实。

查看StdRandom的代码可知,它只会在首次使用时设置一次随机数种子,从而避免了种子重置的问题。因此,请不要手动设置随机数种子。

或者,确保您没有生成有偏差的随机数。您应该使用生成整数的 StdRandom 方法,而不是生成双精度浮点数的方法。

程序提示我的percolates()方法返回“false”,但运行可视化工具时却显示为“true”!

可视化工具执行一个非常特定的 isOpen()/isFull()/percolates() 调用序列。尝试编写你自己的测试用例,只打开一些位置,然后调用percolates()方法。或者,禁用可视化工具中所有对isOpen()和/或isFull()方法的调用,以便集中精力调试percolates()方法的行为。或者,密切关注标记为 Random Operation Order 的测试。

我的代码在我的计算机上可以编译,但在自动评分器上无法编译。

你的代码必须严格遵守API规范。不允许向Percolation类添加额外的public方法或变量。在测试PercolationStats时,我们会使用官方提供的Percolation参考版本,而不是你自己的版本,以避免错误扩散。这意味着你不能依赖任何额外的public方法。

如何选择要运行的文件?如何在 IntelliJ 中传递命令行/程序参数?

首先,导航到 Run -> Edit Configurations。你可以在这里配置不同的调试选项,将不同的类设置为你的“主类”(这意味着程序会从该类中的“main”函数开始执行)。点击左上角的加号可以新建一个配置。对于本课程,你只需要创建一个Application类型的配置即可。然后,您可以随意命名您的配置,选择您想要用于该配置的主类,以及在程序参数字段中设置任何命令行/程序参数。将程序参数输入到该字段中,就像在终端中一样 - 一行,参数之间用空格分隔。