1. 随机数统计实验概述
在编程和算法测试中,验证随机数生成器的等概率分布特性是一项基础但重要的工作。这个Java程序演示了如何使用Math.random()方法生成随机数,并统计各个数字出现的频率,以此验证其等概率性。
核心思路很简单:通过大量重复实验(这里设置了100万次),统计0-9每个数字出现的次数。理论上,如果随机数生成器是完美的等概率分布,每个数字出现的次数应该接近10万次(100万次实验/10个可能的数字)。
注意:在实际工程中,这种统计验证方法常用于测试自定义随机算法、验证第三方随机数库的质量,或者在游戏开发中确保道具掉落概率符合设计预期。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 代码实现解析
2.1 核心代码结构
程序的主体结构非常清晰:
java复制int testTimes = 1000000; // 测试次数
int k = 10; // 随机数范围
int[] counts = new int[10]; // 统计数组
for(int i=0; i<testTimes; i++){
int ans = (int)(Math.random()*k); // 生成0-9的随机整数
counts[ans]++; // 对应位置计数
}
这段代码的关键点在于:
Math.random()返回的是[0,1)区间的double值- 乘以k(10)后得到[0,10)区间的浮点数
- 强制转换为int时,小数部分被截断,得到0-9的整数
2.2 为什么这样能实现等概率分布
这个转换过程之所以能保证等概率,是因为:
- Math.random()在[0,1)区间是均匀分布的
- 每个长度为0.1的子区间(如[0,0.1)、[0.1,0.2)...)被映射到不同的整数
- 由于原始分布均匀,每个子区间被选中的概率相同(都是0.1)
实际经验:在Java中,Math.random()实际上是调用了Random类的nextDouble()方法。虽然对于大多数应用足够好,但在需要更高质量随机数的场景(如密码学),应该使用SecureRandom类。
3. 统计结果分析
程序输出显示各数字出现次数:
code复制0: 100052
1: 99746
2: 100247
3: 99878
4:
