优雅的方式来生成关于百分比的随机值?

nat*_*han 4 java random algorithm percentage

我有N个值(整数).我想知道在百分比中随机选择其中一个值的最优雅方式是什么.例如,对于3值示例:

  • 价值1有30%的机会被选中
  • 价值2有12%的机会被选中
  • 价值3有45%的机会被选中

我需要这个用于我用Java开发的程序,但是伪代码算法或任何其他语言的代码都可以.

Pet*_*rey 11

在不计算要使用的值的情况下,这样做的一种方法是

double d = Math.random() * 100;
if ((d -= 30) < 0) return 1;
if ((d -= 12) < 0) return 2;
if ((d -= 45) < 0) return 3;
return 4;
Run Code Online (Sandbox Code Playgroud)


ass*_*ias 8

建议的算法:

  • 生成一个随机数(n)之间01(假设您的随机生成器分布均匀)
  • 如果n < 0.30返回值1
  • 如果n < 0.42返回值2
  • 否则如果n < 0.87返回值3
  • 否则说你好(你的数字加起来不是100%)

  • 不是'else`而是'else if`,因为`30 + 12 + 45 <100`. (2认同)
  • @nathan被标记为java的问题,似乎相当直观的是,"返回值1"将退出整个if/else if块. (2认同)