[英]Swift random number problems
我正在使用Swift和Xcode 6 Beta 5,並試圖在我的特定約束之間生成一個隨機數。
目前我正在使用arc4random_uniform()函數,它適用於簡單生成,如:
arc4random_uniform(5)
但我試圖創建一個帶有復雜邊界的隨機數。 這是我的嘗試:
randomMovement = Int( arc4random_uniform( (0.25 * Int(cs)) - ( 0.175 * rd ) ) ) + Int( 0.175 * rd )
cs和rd都是整數 - 最初,cs = 100,rd = 40.這應該生成7到25之間的隨機數。但是,由於變量類型,我在Xcode中遇到了很多問題。
使用此代碼,它最初顯示一個錯誤 - 在第一個'*'上,它表示:
'Int' is not convertible to 'UInt8'
但是當我改變它時,它會出現更多的問題,而且似乎我繼續圍成一圈。
出了什么問題,我該如何解決這個問題?
遇到類型問題時,請逐步構建表達式。
import Darwin
let cs = 100
let rd = 40
let min = UInt32(0.175 * Float(rd))
let max = UInt32(0.25 * Float(cs))
// This isn't really necessary, the next line will crash if it's not true, but
// just calling out this implicit assumption
assert(max >= min)
let randomMovement = Int(arc4random_uniform(max - min) + min)
arc4random_uniform
采用UInt32
,所以你需要到達那里。 如果沒有類型轉換,你不能將Float
和Int
相乘,所以你需要添加它們。
當我說“逐步建立”時,我的意思是你,而不是編譯器。 編譯器可以處理:
let randomMovement = Int(arc4random_uniform(UInt32(0.25 * Float(cs)) - UInt32(0.175 * Float(rd))) + UInt32(0.25 * Float(cs)))
但它有點難以理解(可能會計算兩次cs / 4)。
你可以在swift中使用內置的random()函數:
let randomInt = random() % 5
在Swift 4.2中你可以做類似的東西:
let number = Int.random(in: 0 ..< 10)
使用Swift 4.2 ,您現在可以直接從Int.random
調用。 你可以在這里看到更多細節。
let min = a
let max = b
var x = min + random_uniform(max - min)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.