實戰:
(1)案例描述
用JavaScript產生n個[min,max]區間內的不重復隨機數。
(2)實現思路
1.運用Math對象的random()方法生成一個[min,max]區間內的隨機數;
2.生成n個[min,max]區間內的不重復隨機數,生成第i個[min,max]區間的隨機數時,與之前i-1個數比較,如有重復,令i=i-1;重復生成第n個隨機數。確保每次生成的隨機數都不重復。
代碼如下:
<html> <head> <title>產生n個不同隨機數</title> </head> <body> <script> //函數1 求指定范圍內的一個隨機數 function selectFrom(min,max) { var sum = max-min+1; return Math.floor(Math.random()*sum+min); } //函數2 求指定范圍內n個不重復的隨機數 function myNum(n,min,max) { var a = []; for(i=0;i<n;i++) { a[i]=selectFrom(min,max); for(z=0;z<i;z++) { if(a[i]==a[z]) { i--; break; } } } return a; } var result = myNum(10,1,10); console.log(result.toString()); </script> </body> </html>
我們先申明一個selectFrom函數,求他指定范圍內的隨機數,然后,再聲明一個函數,因為selectFrom函數只能聲明一個隨機數,我們要想聲明n個隨機數,就要加個for循環,因為我們要生成n個數,每生成一個數就要和前面生成的數做比較,如果后面這個數和前面生成的一樣,那么這個數就要重新生成,避免重復。那如何把這個值和前面的值進行比較呢,那么前面的數就要存儲下來,把他輸出到控制台是沒法存儲下來的,所以我們這里就要聲明數組,然后把他放到for循環里面,由於我們還要把當前數組生成的值與數組以前的0到 i -1的這個范圍的值進行比較,所以這里還要加一個for循環,把他和前面的進行比較,如果相等,就 i - -,然后用break跳出當前循環,再進行 i ++,重新執行一次。這樣我們把得到的數組返回,把他變成字符串打印出來,運行結果如下,就沒有重復的了: