驗證Math.random()函數產生的是均勻分布的數值
思想:
Math.random()產生50000(MAX盡量多)個隨機數,都將之轉換為0---99(n=100)內的整數,然后查看分別查看1,2,3.。。。。99的每個數的個數是多少,是否接近 "MAX/n" 個即可。
代碼:
1 public class randomR
2 {
3 /**
4 * 驗證Math.random()函數產生的是均勻分布的數值
5 * @param MAX 產生多少個隨機數,越多越好,越多的話數值表現的越明顯
6 * @param n 產生的隨即數是在0--n之間的整數的個數,n值最好取值為100,這里以100為例
7 * @return 數組,存放了從0--n之間的每個整數的個數,用來分析用的。
8 */
9 public static int[] isRandom(int MAX,int n)
10 {
11 int[] list = new int[n]; //存儲數值的
12 for(int k = 0 ; k < n; k++)
13 list[k]=0;
14
15 for(int i = 0 ; i < MAX ; i++)
16 {
17 double d = n * Math.random(); // 0.0 < d < 100.0
18 d = Math.floor(d); // 0.0 <= d <=99.0
19 long l = Math.round(d); // 0 < l < 99
20 int j = (int)l; // 0 < j < 99
21 ++list[j]; //重要地方,用數組統(tǒng)計個數
22 }
23 return list;
24 }
25
26 // 打印函數
27 public static void print(int b[])
28 {
29 for(int i=0; i<b.length ; i++)
30 {
31 System.out.print(b[i] + (i%10 ==9 ? "\n":"\t")); //每行打印10個,每個字符之間一個制表符的距離
32 }
33 }
34
35 //主函數
36 public static void main(String args[])
37 {
38 int a[] = isRandom(50000,100);
39 print(a);
40 }
41 }
42
2 {
3 /**
4 * 驗證Math.random()函數產生的是均勻分布的數值
5 * @param MAX 產生多少個隨機數,越多越好,越多的話數值表現的越明顯
6 * @param n 產生的隨即數是在0--n之間的整數的個數,n值最好取值為100,這里以100為例
7 * @return 數組,存放了從0--n之間的每個整數的個數,用來分析用的。
8 */
9 public static int[] isRandom(int MAX,int n)
10 {
11 int[] list = new int[n]; //存儲數值的
12 for(int k = 0 ; k < n; k++)
13 list[k]=0;
14
15 for(int i = 0 ; i < MAX ; i++)
16 {
17 double d = n * Math.random(); // 0.0 < d < 100.0
18 d = Math.floor(d); // 0.0 <= d <=99.0
19 long l = Math.round(d); // 0 < l < 99
20 int j = (int)l; // 0 < j < 99
21 ++list[j]; //重要地方,用數組統(tǒng)計個數
22 }
23 return list;
24 }
25
26 // 打印函數
27 public static void print(int b[])
28 {
29 for(int i=0; i<b.length ; i++)
30 {
31 System.out.print(b[i] + (i%10 ==9 ? "\n":"\t")); //每行打印10個,每個字符之間一個制表符的距離
32 }
33 }
34
35 //主函數
36 public static void main(String args[])
37 {
38 int a[] = isRandom(50000,100);
39 print(a);
40 }
41 }
42
輸出結果:
1 521 494 511 495 473 493 508 514 498 466
2 513 504 507 492 471 440 483 500 480 489
3 472 509 508 498 471 489 514 536 489 501
4 513 515 509 424 484 511 475 517 530 530
5 515 468 505 545 546 480 513 500 511 476
6 517 489 498 477 481 525 487 498 513 533
7 480 526 570 494 480 479 472 536 463 507
8 519 529 496 521 487 491 540 485 511 514
9 523 444 510 528 494 488 544 505 526 503
10 499 500 464 486 513 461 505 478 494 511
2 513 504 507 492 471 440 483 500 480 489
3 472 509 508 498 471 489 514 536 489 501
4 513 515 509 424 484 511 475 517 530 530
5 515 468 505 545 546 480 513 500 511 476
6 517 489 498 477 481 525 487 498 513 533
7 480 526 570 494 480 479 472 536 463 507
8 519 529 496 521 487 491 540 485 511 514
9 523 444 510 528 494 488 544 505 526 503
10 499 500 464 486 513 461 505 478 494 511
從結果中我們可以看出,每一個數都接近50000/100=500,這就證明了Math.random()函數確實產生了均勻分布的隨即數。這個問題我們應該掌握兩點:
1.解決問題的思想
2.數組在這個問題中的重要作用

浙公網安備 33010602011771號