【问题标题】:Error summing up the array values in Swift在 Swift 中总结数组值时出错
【发布时间】:2015-02-04 18:41:08
【问题描述】:

我是 Swift 的新手。在 Playground 中尝试此代码并得到错误(请参见下面的描述),请您指出正确的方向 - 在哪里寻找解决方案?提前致谢。

func randomSet(num: Int, max: Int) -> Array<Double> {

    var randArray = Array<Double>()

    for index in 0...num {
        randArray[index] = Double(arc4random_uniform(max+1))
    }

ERROR: var sum = randArray.reduce(0) {$0 + $1}

    for index in 0...num {
        randArray[index] = randArray[index] / Double(sum) * Double(max)
    }

    return randArray
}

test = randomSet(10, 100)

在标有 ERROR 字样的行上,我得到了这个:

执行被中断,原因:EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)

【问题讨论】:

  • edit您的帖子标题更能描述问题。 我怎样才能纠正这个问题? 当它出现在未来用户的搜索结果中时,它绝对没有意义。您的标题应描述问题或包含具有一定相关性的描述性问题。谢谢。
  • 请注意,0...num 包括 范围结束,因此将为您提供一个包含 num+1 元素的数组。您可能想改为0 ..&lt; num

标签: swift swift-playground


【解决方案1】:

该错误实际上是由于尝试使用下标在randArray 中附加值引起的。你应该改用append

for _ in 0...num {
    randArray.append(Double(arc4random_uniform(max+1)))
}

【讨论】:

    【解决方案2】:

    这个错误不是来自函数reduce,而是在你的数组初始化时,你不能在初始化之前访问索引。下面的代码修复了这个错误。

      for index in 0...num {
        randArray.append(Double(arc4random_uniform(max+1)))
      }
    

    希望对你有帮助

    【讨论】:

    • 谢谢你,Hamza,这让我们更清楚了!换句话说,我必须先用一些值填充我的数组,然后才能使用索引。明白了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-23
    • 2016-01-05
    • 1970-01-01
    • 1970-01-01
    • 2018-08-19
    相关资源
    最近更新 更多