2017-11-29 5 views
0

私は1から49までの6つの数字の5つの配列を生成するコードを開発しました。私はarc4random_uniform(49)関数を使ってそれを試みました。しかし、appendArrays()が5つのループすべてに対して同じ番号のセットを生成しているとき。Swift 4で同じ機能を持つ乱数を生成しないようにする方法

[11、16、27、31、37、39]、[11、16、27、31、37、39]、[11]、[16:ここ

class six49: lottery { 

    var price: Int 
    var winner: [Int] = [] 

    override init(draws: Int, lines: Int){ 

     price = 3 
     super.init(draws: draws, lines: lines) 
     } 

    func appendArrays(win: inout [Int], win2: inout [[Int]]) -> [[Int]] { 

     while win2.count < lines { 

      while win.count < 6 { 

       let selection = arc4random_uniform(49) 

       if win.contains(Int(selection)){ 
        continue 
       } else { 
        win.append(Int(selection)) 
        win = win.sorted() 

       } 
      } 

      win2.append(win) 

     } 

     return win2 

    } 

} 


let result = six49(draws: 1, lines: 5) 

var arr2: [[Int]] = [] 
var arr1: [Int] = [] 
var collection = result.appendArrays(win: &arr1,win2: &arr2) 

print(collection) 

が出力されます、27,31,37,39]、[11,16,27,31,37,39]、[11,16,27,31,37,39]]

ループごとに異なる番号のセットを作成しようとするが、私は解決策を見つけることができない。

答えて

2

問題は、winアレイを再初期化しないことです。 6の数字が入力されると、変更されることはありませんので、配列win2の配列に同じwin配列を続けて続けてください。

inout [Int]としてappendArraysメソッドに渡す代わりに、メインループに毎回新しいwin配列を作成します。

func appendArrays(win2: inout [[Int]]) -> [[Int]] { 

    while win2.count < lines { 

     var win = [Int]() 

     while win.count < 6 { 

      let selection = arc4random_uniform(49) 

      if win.contains(Int(selection)){ 
       continue 
      } else { 
       win.append(Int(selection)) 
       win = win.sorted()      
      } 
     } 

     win2.append(win)    
    } 

    return win2   
} 

あなたはappendArraysとにかく最終的な値を返しますので、中win2を渡している理由も、それは明らかではありません。関数内にwin2を作成するだけです。

また、配列を一度ソートしてからwin2に追加することもできます。

数字を1...49にする場合は、arc4random_uniform(49)1を追加する必要があります。

func appendArrays() -> [[Int]] { 
    var win2 = [[Int]]() 

    while win2.count < lines { 
     var win = [Int]() 

     while win.count < 6 { 
      let selection = Int(arc4random_uniform(49) + 1) 

      if !win.contains(selection) { 
       win.append(selection) 
      } 
     } 

     win.sort() 

     win2.append(win) 
    } 

    return win2 
} 
+0

これから多くを学びました。ありがとうございました! –

+1

歓迎です、ジェームス。私は助けることができてうれしいです。 – vacawama

+0

これには 'Set 'を使う方が良いでしょう。 – Alexander

関連する問題