我正在编写一个模拟nba彩票的应用程序。我已经编写了代码来生成随机组合,并将它们分配给每个团队。
这是我模拟图纸并将草稿位置分配给每个团队的方法。 standingsArray是一个ObjectWrapper类型的Team项目数组,每个团队都有name,seed,wins,loss,draft position exc ...的值。所以基本上我正在做的是我有14个球并随机选择4个球,它们构成一个组合(顺序并不重要)。所以基本上总共有1001种可能的组合,但其中一种被抛弃。 (你可以忽略第一个while循环,因为它就是那里,所以没有选择抛出的组合)。根据记录为14个彩票队分配了许多组合(最差队伍为250,第二差队为199 ......)。我的方法中的参数standingsArray已经分配给每个团队的可能性数量。接下来,我从总体可能性中随机抽出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 :(得分:0)
试试这个:
for j in 0...(standingsArray[i].possibilities?.count)!-1{
应该写成这样:
for j in 0...(standingsArray[i].possibilities?.count)! - 1{
它需要适当的间距。