Java 通过 Random 生成随机数实现概率问题

背景

服务端收到一条请求,要控制这条请求以 10% 的概率让 Worker1 处理,以 90% 的概率让 Worker2 处理,Java 实现。

分析

通过 Java 中的 java.util.Random 随机生成一个 [0, 100) 区间的整数。

0 ~ 99 之间,每个数字出现的概率是 1%,那么这个随机整数落在 [0, 9) 区间的概率是 10%,落在 [10, 100) 之间的概率就为 90%

然后根据随机整数所属的范围,在 [0, 10) 区间时,给结果赋值为 1,在 [10, 100) 区间时,给结果赋值为 2。

最后,当结果为1时,将请求交给 Worker1;结果为 2 时,交给 Worker2

流程如下
Java实现流程图

实现

private static Random sRandom = new Random();

    public static int nextWorker() {
        int r = sRandom.nextInt(100);
        if (r < 10) {
            return 1;
        } else {
            return 2;
        }
    }

拓展

若后续新增 Worker3,需要分别以不同的概率将请求交给他们。

可以将 [0, 100) 区间的整数进一步细分,如:

  • Worker1 得到请求的概率为10%
  • Worker2 为20%
  • Worker3 为70%

那么可以将区间划分为 [0, 9), [10, 30), [30, 100),生成的随机数落在这三个区间的概率分别为 10%, 20%, 70%

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ToSimpleL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值