【发布时间】:2023-03-26 17:42:01
【问题描述】:
TLDR:我有一个单身:
Random random = new SecureRandom(); // tried with new Random() as well
我使用同一个实例来调用 random.nextInt(3),我得到的结果如下:2、2、2、0、2、2、2、1、2、2。很多'2',但没有那么多的'0'或'1'。会发生什么?
长版:我有一个游戏,其中敌人随机使用 3 种技能中的一种(通过 random.nextInt(3))并且他们最终总是使用相同的技能一遍又一遍。无论是在模拟器上还是在手机上。他们很少使用不同的技能。
当然,在测试中执行 1000 次 random.nextInt(3) 调用会返回看似随机的值,但在我的游戏中不会。而且我只实例化了 Random/SecureRandom 一次并将其用作单例。
在极少数情况下,它会相反:0、1、0、0、1、2、1、1、0、1、0、1、1、0、0。我不明白发生了什么或如何解决它。
【问题讨论】:
-
根据什么定义
2, 2, 2, 0, 2, 2, 2, 1, 2, 2会是一个不那么随机的序列?检查this -
我已经尝试了 100 多次,几乎总是得到 2 次,无论是在模拟器还是手机上。
-
我要说的是,您不可能通过查看序列来评估随机性,我们只是人类 :) “我已经尝试了 100 多次,几乎总是得到 2 个 i>" - 你得到了多少次
2超过 100 次尝试? -
我明白你的意思,你认为我做错了什么或者这是一个观点问题是正确的。但是我在这个项目上工作了一年多,几乎每次我都得到 2。一开始我以为这只是运气不好,但随着时间的推移,我一直看到这种模式。我什至在写这篇评论之前就尝试过,在得到 1 之前得到了 5 次 2。我检查了我所有的代码(而且我是一名专业的 Java 开发人员),研究了网络,但找不到发生这种情况的原因.
-
我并没有假设您做错了什么,这听起来像是一个非常奇怪的问题,我认为您可以记录一些数据以使问题更加清晰。如果 0、1 和 2 的分布不趋向于各 1/3,那么了解实际分布可能有助于找到问题的原因。