Java 生成有关百分比的随机值的优雅方法?

Java 生成有关百分比的随机值的优雅方法?,java,algorithm,random,percentage,Java,Algorithm,Random,Percentage,我有N个值(整数)。我想知道什么是最优雅的方式来随机选择其中一个关于百分比的值。例如,对于3个值的示例: 值1有30%的几率被拾取 值2有12%的几率被选中 值3有45%的几率被选中 我用Java开发的程序需要这个,但伪代码算法或任何其他语言的代码都可以。建议的算法: 在0和1之间生成一个随机数(n)(假设您的随机生成器分布均匀) 如果n

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

  • 值1有30%的几率被拾取
  • 值2有12%的几率被选中
  • 值3有45%的几率被选中
我用Java开发的程序需要这个,但伪代码算法或任何其他语言的代码都可以。

建议的算法:

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

一种不计算要使用的值的方法是

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;
double d=Math.random()*100;
如果((d-=30)<0)返回1;
如果((d-=12)<0)返回2;
如果((d-=45)<0)返回3;
返回4;

选择其中一个与百分比有关的值
-不理解这句话..30+12+45等于87。其他13个呢?不是
else
,而是
else if
,因为
30+12+45<100
。使用
new Random()。nextInt(87)
在结果处加1(或减少if一步)-使用45,30,12order@assylias也许你想写if n<0.30,ELSE,if n<0.42…?@nathan-我想我们可以假设,任何读到这篇文章的人都足够聪明,能够自己解决这个问题。@nathan问题被标记为java,它看起来相当直观,
返回值1
将退出整个if/ELSE if块。太棒了!谢谢你,伙计。