该项目的主要类别是acm.program.GraphicsProgram;
GraphicsProgram
早先在我的项目上工作时,我需要在Pong游戏中稍微随机地移动球,并使用import java.util.Random;
找到解决方案,然后我使用此代码(每当球从玩家的球拍反弹时执行,这使球在每个游戏中的移动都不同):
Random rand = new Random();
boolean bool = rand.nextBoolean();
if (bool)
if (dx > 0)
dx += 1;
else
dx -= 1;
else if (dy > 0)
dy += 0.5;
else
dy -= 0.5;
其中
dx
和dy
分别是水平和垂直速度。但是今天在关于大学的演讲中,我们已经看到了不同的方法(与第一个方法无关,我认为自己更早),使用
import acm.util.RandomGenerator;
接着
RandomGenerator rgen = RandomGenerator.getInstance();
boolean bool = rgen.nextBoolean();
这两个类(Random和RandomGenerator)之间有什么区别吗?如果是这样,哪个更好用?我不太了解
getInstance();
是什么,为什么我在使用Random
类时不需要一个。 最佳答案
ACM RandomGenerator
有一些额外的便捷方法,例如nextColor()
可以选择随机颜色。
它还通过其getInstance()
类方法提供了一个全局生成器。根据评论,听起来构造函数使用当前时间作为种子。这是一个很大的缺陷,并且可能导致不同的生成器实例生成相同的随机数序列的错误。要解决此问题,他们建议仅使用一个通过RandomGenerator
方法访问的getInstance()
实例。
通常,最好使用java.util.Random
,因为它不会在程序中引入第三方依赖性,并且会使用更好的播种算法,而不会受到ACM实现的缺陷的影响。