【发布时间】:2016-03-28 05:11:44
【问题描述】:
我正在编写一个应用程序来模拟 nba 彩票。我已经编写了生成随机组合的代码,并将它们分配给每个团队。
这是我模拟图纸并将草稿位置分配给每个团队的方法。排名数组是 ObjectWrapper 类型的团队项目数组,每个团队的值包括名称、种子、胜利、失败、选秀位置 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 个选择中重复此操作)
【问题讨论】:
-
试试这个
var someValue = standingsArray[x].possibilities?.count! - 1,然后像这样在循环中添加这个值:for a in 0...someValue。只是对这个问题的随机拍摄,尝试这样做,如果这能解决您的问题,请告诉我。 -
当我这样做时,它说我无法解开非可选类型 int,并让我删除感叹号并将其替换为 (standingsArray[x].possibilities?.count)!-1。然后,定义 someValue 的那行给出了错误的指令错误,所以没有工作
-
问题可能与展开有关。如果您可以在将值添加到循环中之前在某处解开值,请检查您的代码。尝试打印出
print((standingsArray[x].possibilities?.count)!)的值。 -
我通过调试弄明白了。我忘记了只有前 14 支球队有机会,而且它在整个排名中循环,所以有些是无效的,这就是它崩溃的原因
-
给你的问题一个答案:)
标签: ios iphone arrays swift sorting