我正在使用一个简单的随机计算,用于4个元素的小范围.
indexOfNext = new Random().nextInt(4); //randomize 0 to 3
Run Code Online (Sandbox Code Playgroud)
当我连接调试器时,每次结果为1 时,我会看到前2-3次.
对于小范围这是错误的方法还是我应该实现另一个逻辑(检测先前的随机结果)?
注意:如果这只是巧合,那么使用这种方法是错误的方法,对吧?如果是的话,你能建议替代方法吗?可能会洗牌?理想情况下,替代方法可以检查下一个结果是否与前一个结果不同.
pet*_*rov 11
不要new Random()每次创建,创建一个对象并多次调用它.
这是因为您需要一个随机生成器和来自其
随机序列的许多数字,而不是拥有许多随机生成器并且
只获得它们生成的随机序列的第一个数字.
您通过重复创建新实例来滥用随机数生成器.(这是由于实现设置了一个起始随机数值,它是系统时钟时间的一个非常确定的函数).这破坏了发电机的统计特性.
您应该创建一个实例,然后nextInt在需要数字时调用.
你可以做的一件事就是抓住Random实例.它必须在每次实例化时自行播种,如果该种子相同,则每次都会生成相同的随机序列.
其他选项是转换为SecureRandom,但您肯定希望保留该随机实例以获得最佳随机数性能.你真的只需要SecureRandom是你随机生成具有安全隐患的东西.就像实现加密算法或解决这些问题一样.
| 归档时间: |
|
| 查看次数: |
281 次 |
| 最近记录: |