您的位置:首页 > 编程语言 > Java开发

java随机数且按权重、比例生成

2016-05-25 11:51 1631 查看
以下两个测试类,即两种实现思路。均由公司同事提供,本人记录分享给大家。

具体实现思路请看代码。。。。。

测试类一:

public class WGRandom {

/**
*
* @author wangguan
*
*/
public static void main(String[] args) {
int a = 0;
int b = 0;
int c = 0;
int d =0;
int e = 0;
int f = 0;

int i = 10;
for (int j = 0; j < 10000000; j++) {
switch (i = doRamdon()) {
case 0:
a++;
break;
case 1:
b++;
break;
case 2:
c++;
break;
case 3:
d++;
break;
case 4:
e++;
break;
case 5:
f++;
break;

default:
System.out.println(">>>>>>>>>>>>" + i);
break;
}
}

System.out.println("a : " + a + "     b : " + b + "     c :" + c+ "     d :" + d+ "    e :" + e+ "    f  :" + f);
System.out.println(a+b+c+d+e+f);

}

private static int doRamdon() {
double[] ds = new double[] {1.0 , 50.0 , 4.0 , 15.0 , 10.0 , 20.0  };
double sum = getSum(ds);
double last = 0;
for (int i = 0; i < ds.length; i++) {
sum = sum- last;
double random = Math.random();
if (random <= ds[i] / sum) {
return i;
}
last = ds[i];
}

return 5;
}

private static double getSum(double[] weight) {
double sum = 0;
for (double d : weight) {
sum += d;
}
return sum;
}

}


测试类二:

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;

/**
*
* @author hehaifeng
*
*/
public class HFRandom {

static Map<Integer , Integer > ds = new HashMap<Integer , Integer> () ;

private static boolean getRamdon(int random ,  int randomNum) {
int belance = randomNum - random;
if(belance >= 0) {
return true;
}
return false;
}

public static void main(String[] args) {

ds.put(50, 0);
ds.put(1, 0);
ds.put(4, 0);
ds.put(15, 0);
ds.put(10, 0);
ds.put(20, 0);

System.out.println(ds);

for (int i = 0; i < 10000000; i++) {
int random = org.apache.commons.lang.math.RandomUtils.nextInt(100);
random++;
for (int key : ds.keySet()) {
if(getRamdon(random, key)){
ds.put(key, ds.get(key)+1 );
break;
}else {
random -= key;
}
}
}

System.out.println(ds);

int sum=0;
for (Iterator iterator = ds.entrySet().iterator(); iterator.hasNext();) {
Entry<Integer, Integer> entry = (Entry<Integer, Integer>) iterator.next();
sum=sum+entry.getValue();
}

System.out.println(sum);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: