亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在Swift中生成一個隨機數而不重復以前的隨機數?

如何在Swift中生成一個隨機數而不重復以前的隨機數?

吃雞游戲 2019-11-04 10:02:59
我對Swift和編程邏輯很陌生,所以請多多包涵如何在Swift中生成0到9之間的隨機數而不重復最后生成的數字?因為相同的數字不會連續出現兩次。
查看完整描述

3 回答

?
阿波羅的戰車

TA貢獻1862條經驗 獲得超6個贊

Swift 5更新


這是一個很好的技巧,可以從以前不僅僅選擇的數字中進行平均選擇。


您有10個數字,但只想從9個數字中選擇(0到9,但不包括前一個數字)。如果將范圍減少1,則可以從9個隨機數中進行選擇,然后將重復的數字替換為該范圍的前一個最高數字。這樣,您每次只需生成一個隨機數即可獲得統一性。


這可以Int.random(in:excluding:)在傳遞所需值的位置實現exclude。


extension Int {

    static func random(in range: ClosedRange<Int>, excluding x: Int) -> Int {

        if range.contains(x) {

            let r = Int.random(in: Range(uncheckedBounds: (range.lowerBound, range.upperBound)))

            return r == x ? range.upperBound : r

        } else {

            return Int.random(in: range)

        }

    }

}

例:


// Generate 30 numbers in the range 1...3 without repeating the

// previous number  

var r = Int.random(in: 1...3)

for _ in 1...30 {

    r = Int.random(in: 1...3, excluding: r)

    print(r, terminator: " ")

}

print()

1 3 2 1 2 1 3 2 1 3 1 3 2 3 1 2 3 2 1 3 2 1 3 1 2 3 2 1 2 1 3 2 3 2 1 3 1 2 1 2


上一個答案:


var previousNumber = arc4random_uniform(10)   // seed the previous number


func randomNumber() -> UInt32 {

    var randomNumber = arc4random_uniform(9)  // generate 0...8

    if randomNumber == previousNumber {

        randomNumber = 9

    }

    previousNumber = randomNumber

    return randomNumber

}


查看完整回答
反對 回復 2019-11-04
  • 3 回答
  • 0 關注
  • 652 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號