-4

我正在尝试创建一个 Java 应用程序,它接收一个字符串并使用该字符串来确定应该从 1 - x 的范围内随机选择多少个整数,其中 x 是一个整数值。我知道使用现代计算技术很难/不可能生成“真正的”随机生成,但是 github 存储库引起了我的兴趣,它使用 jpeg 图像作为随机数生成的来源(https://github.com/prgpascal/bluerand)。

然而,生成器似乎创建了随机数量的字节,所以我想知道你们是否有任何迹象表明如何使用它来以某种方式生成一个范围内的整数。

当然,如果你们中的任何人知道任何其他没有配额限制的生成器,无论是来自具有 api 的网站还是在本地计算机上运行的可以执行此任务的库,我都错过了,我很乐意了解它并转移我的注意力!

感谢您的时间。

4

1 回答 1

1

这是将“随机”字节数组转换为 0 ... N - 1 范围内的随机数的一种方法:

  1. 取前 8 个字节,并将它们转换为long; 例如

      l = (b[0] & 0xffL) | (b[1] & 0xffL << 8 ) | 
          (b[2] & 0xffL << 16 ) | ... (b[7] & 0xffL << 56 );
    
  2. 计算数量为

      n = Math.floorMod(l, N);
    

如果你们中的任何人知道任何其他没有配额限制的生成器,无论是来自网站...

  1. 询问外部资源是题外话。

  2. 让应用程序依赖于可能会出现故障、可能会消失、可能会花费某人网络更改等的网站是一个坏主意。

  3. 从不受信任的来源获取随机数是个坏主意:

    • 他们可能正在录制它们
    • 这些数字实际上可能不是真正随机的(尽管他们说了什么)
    • 数字可能有偏差(意外地,故意地)。

另外,请注意,您通过 BlueRand 库从图像中获得的“真正”随机数根本不是随机的……除非您有良好的随机图像来源;例如,如果某物有运动的图片,则为实时提要。

于 2018-07-28T06:00:45.597 回答