2016-03-28 41 views
3

我正在寫一個應用程序來模擬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個選秀權)

+0

試試這個'var someValue = standingsArray [x] .possibilities?.count! - 1',然後像這樣在循環中添加該值:'for a in 0 ... someValue'。只是隨機處理這個問題,嘗試做到這一點,讓我知道這是否可以解決您的問題。 – Fennec

+0

當我這樣做時,它說我不能打開非可選類型int,並讓我刪除感嘆號並將其替換爲(standingsArray [x] .possibilities?.count)! - 1。然後,someValue被定義的行被給出錯誤的指令錯誤,所以沒有工作 –

+0

這個問題可能與解包有關。檢查你的代碼是否可以在循環中添加值之前將值解開。嘗試打印出'print((standingsArray [x] .possibilities?.count)!)'的值。 – Fennec

回答

0

試試這個:

for j in 0...(standingsArray[i].possibilities?.count)!-1{ 

應該這樣寫:

for j in 0...(standingsArray[i].possibilities?.count)! - 1{ 

它需要適當的間距。

+0

也沒有工作,仍然得到錯誤的指令錯誤。我的猜測是它與解包可選值有關,但我真的不理解那些東西 –

相關問題