赞
踩
假设权重总和是total,那么在这个范围内产生一个随机数,观察这个随机数的所在区间,就能确定在哪个权重的范围之内了。
举个例子,有三个武将A、B、C,他们的出现机率分别是30%、40%和30%。首先产生一个随机数,这里的权重总和是100,分为三个区间,1~30,31~70,71~100。自然随机数的范围也在100以内。假如这个随机数是49,很明显49是在31~70这个区间内,那么可确定该次随机产生的武将是B。思路是这样,但是怎么用算法去实现呢?
对于确定的情况,一个最简单的方法是这样:
1 int rand = 49;//随机数,这里假设是个给定值 2 int A = 30; 3 int B = 40; 4 int C = 30; 5 if(rand>0 && rand<=A){ 6 return A; 7 } 8 else if(rand>A && rand<=A+B){ 9 return B; 10 } 11 else if(rand>A+B && rand<=A+B+C){ 12 return C; 13 }
但是上面说过,这个权重的总和是不确定的,武将个数也不确定,这样做肯定不行。
后来想到了一个简单的办法:
int rand = 49;//随机数 int sum= 0; List<武将> list = new ArrayList<武将>();//假设这是一个武将列表 for(int i=0;i<list.size();i++){ sum = list.get(i).getWeight();//武将的出现机率 if(rand<=sum){ return i;//返回该武将对应的索引 } }
不知道这是不是一个好的办法?或者有什么不妥之处?
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。