Random和RandomGenerator之间的区别

时间:2014-04-03 16:25:11

标签: java class random

此项目的主要课程是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;

其中dxdy分别为球水平和纬向速度。

但是今天在大学讲座中我们已经展示了不同的方法(与第一个无关,我认为自己更早),使用

import acm.util.RandomGenerator;

然后

RandomGenerator rgen = RandomGenerator.getInstance();
boolean bool = rgen.nextBoolean();

这两个类(Random和RandomGenerator)之间有什么区别吗?如果是这样,哪一个更好用?我不太明白getInstance();是什么以及为什么在使用Random类时我不需要它。

1 个答案:

答案 0 :(得分:5)

ACM RandomGenerator有一些额外的便利方法,例如nextColor()来挑选随机颜色。

它还通过其getInstance()类方法提供全局生成器。根据评论,听起来构造函数使用当前时间作为种子。这是一个很大的缺陷,并且可能导致不同生成器实例生成相同序列的随机数的错误。要解决此问题,他们建议只使用RandomGenerator的一个实例,通过getInstance()方法访问。

一般情况下,最好使用java.util.Random,因为它不会在您的程序中引入第三方依赖项,并且它使用更好的种子算法,不受ACM实施的缺陷。

相关问题