2016-12-17 7 views
0

みんな!私たちは持っていると言うことができます番号を2回以上繰り返さないようにするには?

let random = arc4random_uniform(6) 

私はどのように同じ番号を2回以上繰り返さないようにしますか?私はこのようにしてみた:

let previousNumber = Int() 
let lastNumber = Int() 

let random = Int(arc4random_uniform(6)) 

if random == previousNumber { 
    lastNumber = previousNumber 
} else { 
previousNumber = random 
} 

if random == lastNumber { 
random = Int(arc4random_uniform(6)) 
} 

しかし、それは動作しませんでした。私は迅速に新しく、私は新しい迅速な3つのコードでこれについての話題を見つけませんでした。ありがとうございました !

+0

それをテストしてみましょうしましょう[ランダムに配列をシャッフルする](http://stackoverflow.com/questions/24026510/how-do-i-shuffle-an-array-in-swift)、そのele逐次出す。 – dfri

+0

最大2倍、またはわずか2倍は行ですか?シーケンス '2、1、2、3、3、1'はOKですか? – vacawama

+0

2行続けてはい、そのシーケンスはOKです! –

答えて

1

まず第一に選択された値

class History { 

    private let size: Int 
    private var values = [Int]() 

    init(size:Int) { 
     self.size = size 
    } 

    func add(value: Int) { 
     values.insert(value, at: 0) 
     if values.count > size { 
      values.removeLast() 
     } 
    } 

    var repeatedValueOnFullHistory: Int? { 
     guard Set(values).count <= 1 else { return nil } 
     return values.first 
    } 

} 

の最近の履歴を保存するためにクラスを構築することができます次はランダマイザ

class Randomizer { 
    private var allValues = [Int]() 
    private var history: History 

    init?(maxValue: Int) { 
     guard maxValue > 0 else { return nil } 
     self.allValues = Array(0...maxValue) 
     self.history = History(size: maxValue + 1) 
    } 

    var next: Int { 
     let excludedValue = history.repeatedValueOnFullHistory 
     let allowedValues = allValues.filter { excludedValue != $0 } 

     let randomIndex = Int(arc4random_uniform(UInt32(allowedValues.count))) 

     let nextValue = allowedValues[randomIndex] 
     history.add(value: nextValue) 
     return nextValue 
    } 
} 

を構築し、最終的には

if let r = Randomizer(maxValue: 6) { 
    r.next // 6 
    r.next // 2 
    r.next // 1 
    r.next // 4 
    r.next // 6 
    r.next // 4 
    r.next // 1 
} 
+0

あなたの答えをありがとう、私は初心者であり、私はこれらのコードの多くを知らない、それは私が理解するのはかなり難しいです。私はちょうど学習を続けなければならないと思う。ご協力ありがとうございました ! –

関連する問題