私はnba抽選をシミュレートするアプリを書いています。私は既にランダムな組み合わせを生成するためのコードを書いて、各チームに割り当てました。ios-スレッド1 exc_bad_instructionのエラー
ここでは、図面をシミュレートし、各チームにドラフトポジションを割り当てる私の方法です。 standingsArrayは、各チームの名前、シード、勝利、損失、草案位置の値を持つObjectWrapper型のチームアイテムの配列です。だから基本的には、私は14のボールを持っていて、ランダムに4つのボールを選ぶという組み合わせです(順序は関係ありません)。したがって、基本的に合計1001個の組み合わせが可能ですが、1つは取り除かれます。 (スローされた組み合わせが選択されないように、最初のwhileループを無視することができます)。記録に基づいて14の宝くじチームに多くの組み合わせが割り当てられます(最悪のチームの場合は250、2番目の最悪の場合は199)。私のメソッドstandingsArrayの引数には、すでに各チームに割り当てられている可能性の数があります。次に、無作為に4つのボールを合計可能性から引き出し、その組み合わせを持つチームが最初の選択を取得します。しかし、そのチームのすべての組み合わせが選択されていないので、それらの組み合わせをすべて削除する必要がありますが、それは非常に複雑なので、tempPossibilitiesという新しい配列を作成して、すべての組み合わせをすべてのチームに追加します今選択したものを除いて、新しい組み合わせを生成して選択することができます。
ただし、私はこの行にエラーが発生していますfor j in 0...(standingsArray[i].possibilities?.count)!-1{
これは、不正な命令エラーを示しています。なぜこのエラーが発生するのかわかりません。そして、それ以外の何かが意味をなしているのは、forループでエラーが発生したにもかかわらずforループとtempPossibilities配列が適切な量の組み合わせ(宝くじチームなし)で完全に埋められているということです。ありがとう、任意のヘルプは高く評価され、そして本当に長い段落
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 0 ... someValue'のように追加します。この問題でちょっとランダムに撮影してみてください。これで問題が解決したら教えてください。 – Fennec
私はこれを行うと、オプションの型intをアンラップすることができず、感嘆符を削除して(standingsArray [x] .possibilities?count)! - 1に置き換えます。次に、someValueが定義されている行には不正な命令エラーが与えられているので、その作業は行われません。 –
問題はおそらくアンラップです。ループ内に値を追加する前に、値をどこかにアンラップできるかどうかをコードにチェックしてください。 'print((standingsArray [x] .possibilities?count)!)'の値を出力してみてください。 – Fennec