当每个人的概率都不同时,我该如何选择一个随机枚举?

Klipspringer

我知道这里在stackoverflow中已经存在一个有关如何随机选择枚举的问题。在示例代码中,每个字母都有相同的被选择概率。但是,当不是每个枚举都具有相同的概率时,我将如何重写代码?例如:A的概率为50%,B的概率为30%,C的概率为15%,D的概率为5%。

public enum Letter {
  A,
  B,
  C,
  D;

  private static final List<Letter> VALUES =
    Collections.unmodifiableList(Arrays.asList(values()));
  private static final int SIZE = VALUES.size();
  private static final Random RANDOM = new Random();

  public static Letter randomLetter()  {
    return VALUES.get(RANDOM.nextInt(SIZE));
  }
}
ernest_k

这是一种将每个枚举值与概率范围相关联,然后在该范围内拟合随机数以选择值的方法:

enum Letter {
    A(0, 51), B(51, 81), C(81, 96), D(95, 101);

    private int probStart;
    private int probEnd;

    private static final Random RANDOM = new Random();

    Letter(int s, int e) {
        this.probStart = s;
        this.probEnd = e;
    }

    public static Letter randomLetter() {
        int pick = RANDOM.nextInt(100);
        return Arrays.stream(values())
                .filter(v -> pick >= v.probStart && pick < v.probEnd)
                .findAny()
                .get();
    }
}

当然,您可以选择将这些概率缓存在地图中,但是像上述那样的实现(基于百分比比例)似乎只是创建了一个太大的地图,以至于搜索是不希望的。

一些测试连续产生了以下100组选择:

{A=56, B=26, C=14, D=4}
{A=39, B=39, C=18, D=4}
{A=51, B=30, C=13, D=6}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我该如何使用socket.io向一个客户端发出消息(而不是每个人)

如何从每个子集的概率不同的超集中选择一个随机数

Discord BOT,我想向每个人发送一个随机报价,除了给一个用户

选择重复项,同时将除第一个之外的其他每个人串联

S3-上传-如何生成一个预签名的url,该URL赋予每个人对该对象的读取访问权限?

当我在SQL查询中只希望每个人一个时,我会得到每个人多条记录

每个人重复一个模型 100 次

多个人如何同时使用带键盘的一台机器并监视每个人?

创建一个文件名,每个人都可以使用不同的路径

我正在尝试创建一个层次结构视图。单击每个人后,视图应展开和收缩

每次满足if语句时,如何为多维数组中的每个人添加一个int值给'i'

在每个人都具有写权限的地方创建一个Samba共享

ggplot dotplot为每个人显示一个点

创建一个包含每个人的基线时间的列

您如何声明一个变量,以使该值在每个DOM渲染时都不变?

打印人名列表,其中每个人的名字本身就是一个人名列表

如何从概率最小的数组中随机选择一个元素

如何从自我参照表确定每个人的结构

我将如何根据 4 个不同的概率生成一个值?

每个人的下拉值唯一不同的值来自三个下拉框 jquery

我如何选择在巴黎所有酒店预订的每个人的 ID。甲骨文sql

长数据-每个人的第一个值= XR时删除所有行

创建一个循环,输出每个人的年龄和姓名。格式为“姓名(有年龄)”

从枚举的子部分中选择一个随机值

从枚举中选择一个随机值?

Bogus.Faker:如何选择一个随机的枚举值

如何获得每个图像属于一个类的概率

使用随机数时,如何始终选择一个不同的随机词组?

我将如何从一个范围中生成一个数字,并使其成为该范围内的每种可能性都有不同的概率?