生成指定范圍內的隨機數是一個常用的操作
- 首先弄明白Math.random()函數,這個函數默認會返回一個大於等於0但小於1的值[0,1)
- 如果想要生成0~X之間的隨機數(不包括X),只需要將Math.random()返回值乘上X,那么范圍就是[0,X)
- 仔細想想,其實上一步乘的步驟可以看做是放大random函數的值域,因此實際上是乘上(X - 0),也就是上界減下界
- 在上一步可以知道如果想要獲得一個范圍的隨機數,首先需要放大random函數的值域,如果要獲得[a,b]范圍內的隨機數,需要
- 放大值域,Math.random()*(b-a)但是這里出現了一個問題
- 當a為0時,函數返回[0,b)之間的數,結果中不包括b
- 當a不為0時,函數返回[0,b-a)之間的數,結果中不包括b,此時需要改為Maht.random()*(b-a)+a ,范圍變為[a,b)
- 如果限制加大,僅限整數,可以使用floor函數,已知Math.random()X返回[0,X),那么Math.random()X+1返回[0,x+1),再進行下取整並加上下界Math.floor(Math.random() * (max - min + 1) + min) 就可以獲得[min,max]的整數
- 如果不加這個限制,那么目前函數沒有直接的方法,可以通過僅對超過max的部分下取整來解決
- 放大值域,Math.random()*(b-a)但是這里出現了一個問題
- 如果想要生成0~X之間的隨機數(不包括X),只需要將Math.random()返回值乘上X,那么范圍就是[0,X)