【问题标题】:ios- thread 1 exc_bad_instruction error in appios-应用程序中的线程1 exc_bad_instruction错误
【发布时间】: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


【解决方案1】:

试试这个:

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

应该这样写:

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

它需要适当的间距。

【讨论】:

  • 那也不起作用,仍然出现错误的指令错误。我的猜测是它与解开可选值有关,但我真的不明白那些东西
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多