问题描述:给定一个函数int getRandom(),这个函数可以等概率的产生0和1两个随机数。
要求通过这个函数产生等概率的0到n的随机数;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
public class Java随机数 {
public static void main(String[] args) {
testRandomRatio1();
}
//r.nextInt(2)可以等概率的产生0和1两个随机数,函数最终返回可以等概率产生[0,8)的随机数
private static int generateRandom8Num(){
Random r = new Random();
StringBuilder sb = new StringBuilder();
sb.append(Integer.toString(r.nextInt(2)));
sb.append(Integer.toString(r.nextInt(2)));
sb.append(Integer.toString(r.nextInt(2)));
int i = Integer.valueOf(sb.toString(), 2);
return i;
}
//Map的key保存产生的随机数,value保存这个随机数出现的概率
//通过循环1000次可以测试这个随机数里面产生的每个元素是否等概率。
private static void testRandomRatio1(){
Random r = new Random();
Map<Integer,Integer> map = new HashMap<Integer,Integer>();
int rValue;
for(int i =0;i<10000;i++){
rValue = generateRandom8Num();
if(map.containsKey(rValue))
map.put(rValue, map.get(rValue)+1);
else
map.put(rValue,1);
}
System.out.println(map);
}
private static void testRandomRatio2(){
Random r = new Random();
Map<Object,Integer> map = new HashMap<Object,Integer>();
int rValue;
for(int i =0;i<100;i++){
rValue = r.nextInt(2);
if(map.containsKey(rValue))
map.put(rValue, map.get(rValue)+1);
else
map.put(rValue,1);
}
System.out.println(map);
}
}
结果如下图所示:
通过输出可以看出产生的[0,8)的每个随机数都是等概率的。