所以这看起来很简单,对吧?我有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线。
哦,天哪,为什么我不能做得简单一点。
有没有人请?
发布于 2010-08-13 05:49:24
我真的不明白..你就不能这样做吗:
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;
}发布于 2010-08-13 05:59:34
如果你真的只想要几行代码,Java有条件运算符吗?
Random r = new Random();
int getNextValue()
{
t = r.nextRandom()
return t < 0.65f ? (t < 0.2f ? x : y) : z;
}发布于 2010-08-13 05:52:56
我不相信任何一种解决方案都会奏效。如果你使用random,它可能会在10次中挑选出10次。
我认为,如果不跟踪请求和以前的响应,您就不能完成您想要的东西。百分比是相对于整数的一个数字。你的全部价值是什么?
例如,如果我调用此函数1次,它返回X,则该函数返回X的概率为100%。
https://stackoverflow.com/questions/3472313
复制相似问题