java - Random 和 RandomGenerator 的区别

标签 java class random

这个项目的主类是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;

其中dxdy分别是球的水平和垂直速度。

但今天在大学讲座中,我们看到了不同的方法(与第一种方法无关,我自己认为第一种方法更早),使用

导入 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/

相关文章:

R用随机分类值替换DF的空列

java - 如何在 AutocompleteSupportFragment 上设置 [ENTER/SEARCH/ETC...] 键触发器

java - 如何在java中打乱链表

java - Java 中的复活节日期和 UML 方法语法

c# - 具有相似元素的 Selenium Webdriver C# 页面

javascript - 生成具有特定总和的两个数字

Java构造函数、非法表达式

java - 无法从 Maven 原型(prototype)创建项目

c++ - Eclipse 提示递归函数调用

java - 如何使用特定字符生成特定长度的随机字符数组