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

生成几率可配置的随机数

2014-05-20 15:43 183 查看
从 1-10 中产生若干个随机数,要求每个数字出现的几率可配置。

解决方案:将 1-100 分成 10 段(段的大小可以为 0)。每生成一个 1-100 之间的随机数,就看它落在哪一段。如果是第一段,那么取随机结果为 1,依此类推。这样的话,段的宽度越大,随机数对应该段的几率就越大。下面是代码:

public class ConfigurableRandom {

// 根据指定的几率生成 500 个随机数
public static void main(String[] args) {

// 数字 1-10 产生的几率分配。加起来应该等于 100
int[] possibilities = {2, 18, 5, 5, 5, 25, 10, 0, 20, 10};

// 分段
int[] splitters = new int[11];
for (int i = 0; i < possibilities.length; i++) {
splitters[i + 1] = splitters[i] + possibilities[i];
}
System.out.println("分段:" + Arrays.toString(splitters));

// 生成随机数并统计生成次数
int[] counter = new int[10];
Random r = new Random();
for (int i = 0; i < 500; i++) {
int d = (int) (r.nextDouble() * 100) + 1;

for (int j = 0; j < splitters.length - 1; j++) {
if (d > splitters[j] && d <= splitters[j + 1]) {
System.out.printf("%3d", j + 1);
counter[j]++;
break;
}
}

if ((i + 1) % 25 == 0) {
System.out.println();
}
}

System.out.println("/n1~10出现次数统计:" + Arrays.toString(counter));
}

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