这个项目的主类是acm.program.GraphicsProgram;
GraphicsProgram
早些时候在我的项目上工作时,我需要在 Pong 游戏中稍微随机化球的运动,并通过使用 import java.util.Random;
找到了解决方案,然后我使用了这段代码(每次都执行球从玩家的 Racket 上反弹,这使得球在每场比赛中的移动方式不同):
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
分别是球的水平和垂直速度。
但今天在大学讲座中,我们看到了不同的方法(与第一种方法无关,我自己认为第一种方法更早),使用
导入 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 实现缺陷的影响。
关于java - Random 和 RandomGenerator 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22843536/