[英]How to prevent function from generating same sets of random number in Swift 4
我開發了一些代碼來生成1到49之間的六個數字組成的五個數組。我使用arc4random_uniform(49)
函數嘗試做到這一點。 但是,當appendArrays()
為所有五個循環生成相同的一組數字時。
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)
輸出如下:
[[11,16,27,31,37,39],[11,16,27,31,37,39],[11,16,27,31,37,39],[11,16,27, 31,37,39],[11,16,27,31,37,39]]
我一直在到處尋找嘗試在每個循環中創建不同的數字集,但是我似乎找不到任何解決方案。
您的問題是您永遠不會重新初始化win
數組。 一旦有6
數字,它就永遠不會改變,因此您只需將相同的win
數組追加到win2
數組中即可。
而不是將win
作為inout [Int]
傳遞到您的appendArrays
方法中, 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
}
另外,不清楚為什么要傳入win2
,因為appendArrays
無論如何appendArrays
返回最終值。 您可以在函數內部創建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
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.