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); } }
相关文章推荐
- java集合
- el表达式
- RxJava学习小结
- 深入理解java中的synchronized关键字
- Java Socket 多线程聊天室
- ubuntu 下 eclipse 菜单不见了解决办法
- 什么是Spring的依赖注入。
- SpringMVC Controller写法
- java.lang.OutOfMemoryError: PermGen space及其解决方法
- SpringMVC无法获取请求中的参数的问题的调查与解决(1)
- JAVA——装饰和继承的比较
- JAVA实验七 图形用户界面的设计与实现
- java中方法重载和方法重写分析
- Java 8新的时间日期库
- eclipse连接sqlserver2014问题
- Java多线程学习
- Java并发编程:线程池的使用
- Java编程中“为了性能”一些尽量做到的地方
- java多线程之指令重排序
- Java核心知识点-JVM结构和工作方式