/**
*
* JAVA 返回随机数,并根据概率、比率
* <p/>
*
* @author <a href="mailto:durb@etuo.cn">durb</a>
* @version Date: 2015年4月15日 下午3:22:22
* @serial 1.0
* @since 2015年4月15日 下午3:22:22
*/
public class MathRandom {
/**
* 1出现的概率为%50
*/
public static double rate1 = 0.50;
/**
* 2出现的概率为%20
*/
public static double rate2 = 0.20;
/**
* 3出现的概率为%15
*/
public static double rate3 = 0.15;
/**
* 4出现的概率为%10
*/
public static double rate4 = 0.10;
/**
* 5出现的概率为%4
*/
public static double rate5 = 0.04;
/**
* 6出现的概率为%1
*/
public static double rate6 = 0.01;
/**
* Math.random()产生一个double型的随机数,判断一下 例如0出现的概率为%50,则介于0到0.50中间的返回0
*
* @return int
*
*/
private int PercentageRandom() {
double randomNumber;
randomNumber = Math.random();
if (randomNumber >= 0 && randomNumber <= rate1) {
return 1;
} else if (randomNumber >= rate1
&& randomNumber <= rate1 + rate2) {
return 2;
} else if (randomNumber >= rate1 + rate2
&& randomNumber <= rate1 + rate2 + rate3) {
return 3;
} else if (randomNumber >= rate1 + rate2 + rate3
&& randomNumber <= rate1 + rate2 + rate3 + rate4) {
return 4;
} else if (randomNumber >= rate1 + rate2 + rate3 + rate4
&& randomNumber <= rate1 + rate2 + rate3 + rate4 + rate5) {
return 5;
} else if (randomNumber >= rate1 + rate2 + rate3 + rate4 + rate5
&& randomNumber <= rate1 + rate2 + rate3 + rate4 + rate5 + rate6) {
return 6;
}
return -1;
}
/**
* 测试主程序
*
* @param agrs
*/
public static void main(String[] agrs) {
int i = 0;
MathRandom a = new MathRandom();
for (i = 0; i <= 100; i++)// 打印100个测试概率的准确性
{
System.out.println(a.PercentageRandom());
}
}
}
JS 算法概率
function prizeRand(oArr) {
var sum = 0; // 总和
var rand = 0; // 每次循环产生的随机数
var result = 0; // 返回的对象的key
console.log(oArr);
// 计算总和
for (var i in oArr) {
sum += oArr[i][0];
}
// 思路就是如果设置的数落在随机数内,则返回,否则减去本次的数
for (var i in oArr) {
rand = Math.floor(Math.random()*sum + 1);
if (oArr[i][0] >= rand) {
result = oArr[i][0];
break;
} else {
sum -= oArr[i][0];
}
}
return result;
}
var oArr = {'5':[5, 'Mac'], '3':[15, 'iPhone'], '2':[30, 'iPad'], '1':[50, 'iWatch']};
console.log(prizeRand(oArr));
本文介绍了一种基于概率权重的随机数生成方法,通过设定不同数值出现的概率来实现加权随机选择。文中提供了两种实现方式:一种是Java实现,另一种是JavaScript实现。
5813

被折叠的 条评论
为什么被折叠?



