有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何在Java中生成一个随机数,但偏向于1个特定的数字

//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) 个答案

  1. # 1 楼答案

    假设你的目标范围是[0,6],你给出的可能性是1的两倍。我会给你两种不会侵蚀你记忆的方法:

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

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

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

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

  3. # 3 楼答案

    你可以建立一个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);
    }