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。我不明白发生了什么或如何修理它。
编辑:在这种情况下,你可以尝试使用指定here的getInstanceStrong()方法,看看是否产生你想要的结果。从JDK8开始,getInstanceStrong()
方法将返回平台上最强大的SecureRandom实现。