首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建一个百分比分配,其中值x返回20%的时间,值y返回35%的时间,值z

创建一个百分比分配,其中值x返回20%的时间,值y返回35%的时间,值z
EN

Stack Overflow用户
提问于 2010-08-13 05:46:06
回答 4查看 442关注 0票数 0

所以这看起来很简单,对吧?我有x,y,z值。当我调用函数getNextValue()时,20%的时间需要返回x,45%的调用需要返回y,调用函数时35%的时间返回z。

因此,我创建了一个hashmap,其中包含1-100作为关键整数。我这样填充地图:映射键1-20具有值x,映射键21-65具有值y,映射键66-100具有值z

所以我使用java的Random来做random.nextInt(100),它返回一个介于1-100之间的随机数,然后我调用map.get( random.nextInt(100)),它给出这个比率。

所以这会返回x 20%的时间。返回y 45%的时间。返回z35%的时间。

但我正在寻找更简单的东西。我知道有一些东西可能会使用mod或位移位,但我就是想不出有什么东西。一个简单的2-3线。

哦,天哪,为什么我不能做得简单一点。

有没有人请?

EN

回答 4

Stack Overflow用户

发布于 2010-08-13 05:49:24

我真的不明白..你就不能这样做吗:

代码语言:javascript
复制
Random r = new Random();

int getNextValue()
{
  float t = r.nextFloat();
  // t will be in [0,1] range

  if (t < 0.2f)
    return x;
  else if (t < 0.65f)
    return y;
  else
    return z;
}
票数 5
EN

Stack Overflow用户

发布于 2010-08-13 05:59:34

如果你真的只想要几行代码,Java有条件运算符吗?

代码语言:javascript
复制
Random r = new Random();

int getNextValue()
{
t = r.nextRandom()
return  t < 0.65f ? (t < 0.2f ? x : y) : z;
}
票数 2
EN

Stack Overflow用户

发布于 2010-08-13 05:52:56

我不相信任何一种解决方案都会奏效。如果你使用random,它可能会在10次中挑选出10次。

我认为,如果不跟踪请求和以前的响应,您就不能完成您想要的东西。百分比是相对于整数的一个数字。你的全部价值是什么?

例如,如果我调用此函数1次,它返回X,则该函数返回X的概率为100%。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3472313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档