JavaScript實戰:產生n個不重復隨機數


實戰:

(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 ++,重新執行一次。這樣我們把得到的數組返回,把他變成字符串打印出來,運行結果如下,就沒有重復的了:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM