Random.next(int)方法使用哪种概率?

时间:2015-08-13 08:17:46

标签: java android random probability

在我的Android应用程序中,我想使用方法Random.next(int)生成0到100000之间的整数。我想知道这种方法的概率类型。该范围内的每个值都是相同的吗?

4 个答案:

答案 0 :(得分:3)

假设您想绘制100000,它将广泛地满足[0,100000]范围内均匀分布的统计特性。

即,

  1. 生成任何特定数字的概率是相等的,与先前绘制的数字无关。

  2. 随机数样本的均值平均值为100000/2

  3. 样本的方差将收敛于均匀分布的方差。

  4. 但它不完美,或加密安全。特别是你可以观察到自相关效应。根据您的具体要求,您可能需要考虑替代方案。

答案 1 :(得分:1)

我假设您指的是nextInt(int)而不是next(int)protected,而不是公共方法)。

它是均匀的(离散的,伪随机的)分布。

来自documentation

  

返回0之间的伪随机,均匀分布的 int值   (包括)和指定值(不包括)

答案 2 :(得分:0)

它将生成一个伪随机数。每个数字具有相同的生成概率。我试着拨打Random.next(2) 100次,得到50个1和50个。我想你应该已经明白了。它的分布均匀。

如果你很好奇,这是源代码:

protected synchronized int next(int bits) {
    seed = (seed * multiplier + 0xbL) & ((1L << 48) - 1);
    return (int) (seed >>> (48 - bits));
}

答案 3 :(得分:0)

here的每次调用都会产生不同的结果。

概率怎么样?

来自docs:

  

nextInt的一般契约是伪随机生成并返回一个int值。 所有2 ^ 32个可能的int值都以(近似)相等的概率生成