使用arc4random()時,我可以設置一系列數值嗎?例如只有50-100。如何在使用arc4random()時選擇數值範圍()
回答
正如以下其他帖子所指出的,最好使用arc4random_uniform
。 (當最初編寫這個答案時,arc4random_uniform
不可用)。除了避免arc4random() % x
的模偏差,它還可以在短時間內遞歸使用時避免arc4random
的播種問題。
arc4random_uniform(4)
將產生0,1,2或3。這樣,就可以使用:
arc4random_uniform(51)
並且僅添加50向結果得到50之間100 &(含)的範圍內。
這隻給你0到50,不給你一個50到100的範圍。 – Boon 2011-11-25 01:02:21
就像Run Loop說的那樣加50. 50. int num =(arc4random() %(51))+50; – Nungster 2012-02-24 18:38:27
請注意此方法的[模偏移](http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle#Modulo_bias)。更安全地使用['arc4random_uniform()'](http://stackoverflow.com/questions/648739/objective-c-modulo-bias)。 – JohnK 2013-05-10 01:16:57
int fromNumber = 10;
int toNumber = 30;
int randomNumber = (arc4random()%(toNumber-fromNumber))+fromNumber;
會產生10
和30
之間randon number
,即11,12,13,14......29
這是(arc4random()%(toNumber-fromNumber + 1))+ fromNumber – malinois 2011-04-11 19:29:46
請注意此方法的[模偏移](http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle#Modulo_bias)。更安全地使用['arc4random_uniform()'](http://stackoverflow.com/questions/648739/objective-c-modulo-bias)。 – JohnK 2013-05-10 01:18:04
在許多情況下,10通30就意味着包容性,(包括10和30)...
int fromNumber = 10;
int toNumber = 30;
toNumber ++;
int randomNumber = (arc4random()%(toNumber-fromNumber))+fromNumber;
注意到其中的差別toNumber - fromNumber現在是21 ...(20 + 1),它產生0到20(含)的可能結果,當從第(10)個結果添加到10到30(含)時,結果爲0到20。
請注意此方法的[模偏移](http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle#Modulo_bias)。更安全地使用['arc4random_uniform()'](http://stackoverflow.com/questions/648739/objective-c-modulo-bias)。 – JohnK 2013-05-10 01:18:45
擴展JohnK評論。
建議您使用以下函數返回一個範圍的隨機數:
arc4random_uniform(51)
將在範圍0
返回一個隨機數50
。
然後您可以添加您下限此類似:
arc4random_uniform(51) + 50
將在範圍50
返回一個隨機數100
。
我們使用arc4random_uniform(51)
而不是arc4random() % 51
的原因是爲了避免modulo bias。這在手冊頁中突出顯示如下:
arc4random_uniform(upper_bound)將返回一個小於upper_bound的均勻分佈的隨機數。 arc4random_uniform()被推薦用於像arc4random()%upper_bound這樣的結構,因爲當上限不是2的冪時,它避免了「模偏置」。
總之,你會得到一個更均勻分佈的隨機數生成。
您可以使用此代碼與範圍內生成隨機值:
//range from 50 to 100
int num1 = (arc4random() % 50) + 50; or
int num1 = arc4random_uniform(50) + 50;
//range from 0-100
int num1 = arc4random() % 100; or
int num1 = arc4random_uniform(100);
在斯威夫特你可以使用這個(由@Justyn答案啓發)
func generateRandomKey(fromRange rangeFrom:Int, toRange rangeTo:Int) -> Int{
let theKey = arc4random_uniform(UInt32(rangeTo - rangeFrom)) + UInt32(rangeFrom)
return Int(theKey)
}
總會給你一個隨機的範圍整數。
- 1. arc4random()範圍包括底片
- 2. 如何使用戶選擇範圍(js)
- 3. 如何使用Chr選擇範圍
- 4. SSRS按值範圍分組:選擇值時更改範圍
- 5. 如何選擇超出範圍的值?
- 6. 如何選擇範圍內的值
- 7. 取出範圍內的數字arc4random()%x
- 8. 使用RegExp選擇範圍
- 9. 如何選擇範圍
- 10. 選擇範圍內的值
- 11. 日期範圍選擇器 - 24小時範圍選擇
- 12. 如何在熊貓中選擇數值範圍?
- 13. R選擇時間範圍
- 14. 如何使用持續時間範圍獲取曲目選擇
- 15. 當使用matplotlib製作圖形時,我如何選擇範圍?
- 16. 如何禁用範圍選擇按鈕?
- 17. 如何在UISearchBar中多選擇範圍?
- 18. 在mysql中選擇一個值範圍
- 19. 選擇數據範圍
- 20. 選擇數字範圍?
- 21. 選擇範圍個數
- 22. 選擇範圍,使錯誤
- 23. 選擇值的範圍日期值的範圍內
- 24. 明確選擇複選框範圍值
- 25. 如何選擇按範圍分組的值的計數
- 26. 如何選擇包含大於指定數值的範圍?
- 27. MYSQL - 在時間範圍內選擇
- 28. 時間範圍選擇在C#
- 29. 如何使用一行在熊貓中選擇範圍
- 30. 如何使用Javascript在textarea中選擇一個字符範圍?
使用模的範圍並添加它的偏移量,如arc4random()%50 + 50;它會爲你提供一個在50和99範圍內的隨機數。 – holex 2013-11-03 10:01:06