我正在寫一個應用程序來模擬nba樂透。我已經編寫了代碼來生成隨機組合,並將它們分配給每個團隊。ios-線程1在應用程序exc_bad_instruction錯誤
以下是我的方法來模擬圖紙並將草稿位置分配給每個團隊。積分榜數組是一個ObjectWrapper類型的Team項目數組,包含名字,種子,勝利,損失和選秀位置等等。所以基本上我在做什麼是我有14個球,並隨機選擇4個球,這組成了一個組合(順序無關緊要)。所以基本上總共有1001個可能的組合,但其中一個被拋出。 (你可以忽略第一個while循環,因爲這只是在那裏,所以拋出的組合沒有被選中)。根據記錄,14個彩票團隊分配了一些組合(最差的隊伍是250,第二個最差的隊伍是199)。我在方法榜上的論點已經有了分配給每支球隊的可能性數量。接下來,我從全部可能性中隨機抽取4個球,並且具有該組合的球隊獲得第一個選擇。但是因爲所選擇的球隊的所有組合都不能再次選擇第二順位,所以我必須移除所有這些組合,但這非常複雜,所以我做了一個名爲tempPossibilities的新數組,它爲每個球隊附加了所有組合除了剛剛選中的那個,它允許我生成一個新組合以供選擇。
但是,我在這一行收到一個錯誤for j in 0...(standingsArray[i].possibilities?.count)!-1{
它說錯誤的指令錯誤,我無法弄清楚爲什麼我得到這個錯誤。還有什麼沒有意義的是,for循環的作品和tempPossibilities數組完全填充了正確數量的組合(沒有彩票團隊),即使錯誤發生在for循環? 代碼如下:任何幫助表示讚賞,謝謝,對不起,我真的很長一段
func setDraftPositions(var standingsArray: [Team])->[Team]{
var lottery: [Team]=[]
var totalPossibilities: [[Int]]=combosOfLength(14, m: 4)
var tempPossibilities = []
var rand = Int(arc4random_uniform(UInt32(totalPossibilities.count)))
var draw = totalPossibilities[rand]
while (draw==(unused?.first)!) {
rand = Int(arc4random_uniform(UInt32(totalPossibilities.count)))
draw = totalPossibilities[rand]
}
s: for x in 0...13{
for a in 0...(standingsArray[x].possibilities?.count)!-1{
if(draw==standingsArray[x].possibilities![a]){
standingsArray[x].setDraftingPosition(1)
standingsArray[x].isLottery=true;
lottery.append(standingsArray[x])
for i in 0...(standingsArray.count-1) {
if(standingsArray[i].firstName != standingsArray[x].firstName!) {
for j in 0... (standingsArray[i].possibilities?.count)!-1{ //ERROR is happening here
tempPossibilities.append(standingsArray[i].possibilities![j])
}
}
}
standingsArray.removeAtIndex(x)
break s;
}
}
}
(重複這在未來2個選秀權)
試試這個'var someValue = standingsArray [x] .possibilities?.count! - 1',然後像這樣在循環中添加該值:'for a in 0 ... someValue'。只是隨機處理這個問題,嘗試做到這一點,讓我知道這是否可以解決您的問題。 – Fennec
當我這樣做時,它說我不能打開非可選類型int,並讓我刪除感嘆號並將其替換爲(standingsArray [x] .possibilities?.count)! - 1。然後,someValue被定義的行被給出錯誤的指令錯誤,所以沒有工作 –
這個問題可能與解包有關。檢查你的代碼是否可以在循環中添加值之前將值解開。嘗試打印出'print((standingsArray [x] .possibilities?.count)!)'的值。 – Fennec