如何在Java中生成随机数但有利于1个特定数字

时间:2014-01-12 15:47:21

标签: java

//Generates a random number but doesn't allow the same number be repeated
for (int i = 0; i < questions1.length; i++)
{
  //random number
  int r = (int)(Math.random() * i);
  temp = index[r];
  index[r] = index[i];
  index[i] = temp;
}

我如何让它特别支持1号?

3 个答案:

答案 0 :(得分:4)

例如,如果你想要一个介于1-6之间的随机数,但想要选择3的可能性是其他任何数字的两倍,那么一个非常简单的解决方案就是创建一个包含7个索引的数组。 1,2,4,5,6都各有一个索引。 3持有两个指数。现在选择0到6之间的随机数,并返回该索引中的任何数字。

使用这种方法,您可以为任何数字范围提供您想要的任何权重。

几乎可以肯定更优雅的解决方案,但这将完成工作。

答案 1 :(得分:2)

你可以建立一个List并用你想要的比例填充你想要的数字。然后使用Collections.shuffle

public void test() {
    // Throw 1 twice as likely and 6 3 times as likely as the other numbers.
    List dice = Arrays.asList(1,1,2,3,4,5,6,6,6);
    Collections.shuffle(dice);
}

答案 2 :(得分:0)

假设您的目标范围是[0,6],并且您给出的概率是可能性的两倍。我会给你两种方法,不会忘记你的记忆:

  1. 从[0,7]中选择一个随机数并将地图7映射到1
  2. 从[0,6]中选择一个随机数,如果不是1则从[0,6]中返回一个新的随机数。