2016-03-28 17 views
3

Ben nba piyango simüle etmek için bir uygulama yazıyorum. Rastgele kombinasyonları oluşturmak için kodları zaten yazdım ve her takıma atadım.ios- iş parçacığı 1 exc_bad_instruction hatası app

Çizimlerimi simüle etme ve her takım için taslak konumlarını atama yöntemim. standingsArray, her takım için ad, tohum, kazanç, kayıp, taslak pozisyon değerleri ... değerleri olan ObjectWrapper türünde takım öğeleri dizisidir. Yani temelde ne yapıyorum 14 topları var ve rastgele bir kombinasyon (sipariş önemli değil) oluşturan 4 topları seçin. Yani esasen toplam 1001 toplam olası kombinasyon vardır, ancak biri dışarı atılır. (ilk while döngüsünü yok sayabilirsiniz, çünkü bu sadece dışarı atılmış kombinasyon seçilemez). Rekorlara dayanan 14 piyango takımına bir takım kombinasyonlar atanır (en kötü takım için 250, ikinci en kötü ikinci için 199). Metodum standingsArray'daki argüman zaten her bir takım için atanan olasılıkların sayısına sahip. Ardından, toplam olasılıklardan rastgele 4 top alıyorum ve bu kombinasyonla takım ilk seçimini yapıyor. Ancak, seçilen takımın tüm kombinasyonları ikinci seçim için tekrar seçilemeyeceğinden, tüm bu kombinasyonları kaldırmam gerekiyor, ancak bu çok karmaşık bir durum. Bunun yerine, her takım için tüm kombinasyonları ekleyen tempPossables adında yeni bir dizi oluşturuyorum. seçili olan hariç, daha sonra seçim yapmak için yeni bir kombinasyon oluşturmamı sağlar.

Ancak, bu satırda bir hata alıyorum for j in 0...(standingsArray[i].possibilities?.count)!-1{ Kötü komut hatası diyor ve bu hatayı neden aldığımı anlayamıyorum. Ve başka bir anlam ifade etmemek için, for döngüsü çalışır ve tempPossibilities dizisi, hata, for döngüsünde gerçekleşse bile, doğru miktarda kombinasyonlarla (piyango takımı olmadan) tam olarak doldurulur mu? Kod aşağıdadır: herhangi bir yardım gerçekten uzun paragrafta

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; 
     } 
     } 

    } 

(önümüzdeki 2 çekmeleri için tekrarlayın)

+0

Bunu deneyin 'var someValue = standingsArray [x] .possibilities? .count! - 1 've sonra bu değeri şu şekilde ekleyin: "0 ... someValue" için. Bu sorunda sadece rastgele bir atış yapın, bunu yapmayı deneyin ve sorununuzu giderirse bana bildirin. – Fennec

+0

Bunu yaptığımda, isteğe bağlı olmayan int türünü açamayacağımı ve ünlem işaretini silmediğimi ve onu (standingsArray [x] .possibilities? .count)! - 1 ile değiştirdiğimi söylüyor. Ardından, someValue öğesinin tanımlandığı satırın hatalı yönerge hatası verilir, bu nedenle çalışmadı –

+0

Sorun büyük olasılıkla istenmeyen bir şekilde kaldırılır. Değerleri döngüye eklemeden önce bir yere doyamadığınız takdirde kodunuzu kontrol edin. Print ((standingsArray [x] .possibilities? .count)!) 'Değerlerini yazdırmayı deneyin. – Fennec

cevap

0

için teşekkür ederim, takdir ve üzgün olduğunu bu deneyin:

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

Bu şekilde yazılmalıdır: uygun aralığa ihtiyaç duyar.

+0

da işe yaramadı, hala kötü yönerge hatası alıyorum. Benim tahminim, isteğe bağlı değeri kaldırmakla ilgili bir şey var, ama gerçekten bu şeyleri anlamıyorum –

İlgili konular