验证Math.random()函数产生的数值
验证Math.random()函数产生的是均匀分布的数值
思想:
Math.random()产生50000(MAX尽量多)个随机数,都将之转换为0---99(n=100)内的整数,然后查看分别查看1,2,3.。。。。99的每个数的个数是多少,是否接近 "MAX/n" 个即可。
代码:
输出结果:
- public class randomR {
- /** * 验证Math.random()函数产生的是均匀分布的数值
- * @param MAX 产生多少个随机数,越多越好,越多的话数值表现的越明显 * @param n 产生的随即数是在0--n之间的整数的个数,n值最好取值为100,这里以100为例
- * @return 数组,存放了从0--n之间的每个整数的个数,用来分析用的。 */
- public static int[] isRandom(int MAX,int n) {
- int[] list = new int[n]; //存储数值的 for(int k = 0 ; k < n; k++)
- list[k]=0;
- for(int i = 0 ; i < MAX ; i++) {
- double d = n * Math.random(); // 0.0 < d < 100.0 d = Math.floor(d); // 0.0 <= d <=99.0
- long l = Math.round(d); // 0 < l < 99 int j = (int)l; // 0 < j < 99
- ++list[j]; //重要地方,用数组统计个数 }
- return list; }
- // 打印函数
- public static void print(int b[]) {
- for(int i=0; i<b.length ; i++) {
- System.out.print(b[i] + (i%10 ==9 ? "\n":"\t")); //每行打印10个,每个字符之间一个制表符的距离 }
- }
- //主函数 public static void main(String args[])
- { int a[] = isRandom(50000,100);
- print(a); }
- }
从结果中我们可以看出,每一个数都接近50000/100=500,这就证明了Math.random()函数确实产生了均匀分布的随即数。这个问题我们应该掌握两点: 1.解决问题的思想 2.数组在这个问题中的重要作用
- 521 494 511 495 473 493 508 514 498 466 513 504 507 492 471 440 483 500 480 489
- 472 509 508 498 471 489 514 536 489 501 513 515 509 424 484 511 475 517 530 530
- 515 468 505 545 546 480 513 500 511 476 517 489 498 477 481 525 487 498 513 533
- 480 526 570 494 480 479 472 536 463 507 519 529 496 521 487 491 540 485 511 514
- 523 444 510 528 494 488 544 505 526 503 499 500 464 486 513 461 505 478 494 511
顶(1)
踩(0)
- 最新评论