【问题标题】:Is the Math.random() method in java truly random? [closed]java中的Math.random()方法真的是随机的吗? [关闭]
【发布时间】:2017-05-29 11:45:50
【问题描述】:

我正在使用 Math.random() 方法将 3 个位图中的 1 个分配给许多对象,因此当它们出现在屏幕上时,它们看起来都不同,方法是调用一个随机数,然后根据该数字之间的位置分配位图每个对象都有 0 和 1,但我不断看到类似位图的图案连续出现很多次,这只是我在寻找没有图案的地方吗?有没有更好的方法来随机化这样的事情?

【问题讨论】:

  • "...is this just me looking for patterns where there are none?" -- 很有可能。 Math.random() 永远不会是“真正随机的”,但它应该是随机的足够以满足该(以及大多数)程序的需求。
  • 你的作业做得怎么样?三个位图中的任何一个的概率真的相等吗?

标签: java android math random


【解决方案1】:

它不是“真正”随机的,但它“足够随机”。很少有真正随机的来源,例如大气噪声。也许您用来创建位图的方法自然会创建类似的图案。

【讨论】:

    【解决方案2】:

    JDK1.7 文档说:返回值是伪随机选择的,从该范围内(大约)均匀分布。

    【讨论】:

      【解决方案3】:

      我认为您可能需要使用种子,以便每次生成不同的序列。见(https://docs.oracle.com/javase/7/docs/api/java/util/Random.html

      如果使用相同的种子创建 Random 的两个实例,并且为每个实例进行相同的方法调用序列,它们将生成并返回相同的数字序列。为了保证这个属性,为类 Random 指定了特定的算法

      使用种子可以生成相同的结果,使用不同的种子可以保证生成不同的数列。

      【讨论】:

        【解决方案4】:

        如果您想要比标准 Java RNG 更“随机”的东西,那么您需要使用加密 RNG。这会更慢,并且您将无法通过设置种子来重复相同的随机序列,因为 RNG 需要各种内部系统输入以及您提供的任何种子。详情请见java.security.SecureRandom

        【讨论】:

          猜你喜欢
          • 2010-12-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-11-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多