此项目的主要课程是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
类时我不需要它。
答案 0 :(得分:5)
ACM RandomGenerator
有一些额外的便利方法,例如nextColor()
来挑选随机颜色。
它还通过其getInstance()
类方法提供全局生成器。根据评论,听起来构造函数使用当前时间作为种子。这是一个很大的缺陷,并且可能导致不同生成器实例生成相同序列的随机数的错误。要解决此问题,他们建议只使用RandomGenerator
的一个实例,通过getInstance()
方法访问。
一般情况下,最好使用java.util.Random
,因为它不会在您的程序中引入第三方依赖项,并且它使用更好的种子算法,不受ACM实施的缺陷。