索引超出范围 - 功能错误

时间:2017-01-10 19:13:21

标签: arrays swift parameters

我有一个带有2个参数的函数--Int数组叫做Numbers和Numbers1。我想将索引“i”上Numbers中的每个元素与Numbers2中相同索引上的每个元素相乘。然后我想得到乘法结果的总和。当我调用该函数时,它会显示错误 - 索引超出范围。代码如下:

var sum = Int()
var Array = [Int]()
var totalsum = Int()

func prumerdanehopredmetu(Numbers:[Int], Numbers2:[Int]) -> Int {
    for i in Numbers {
        sum = Numbers[i] * Numbers2[i]
        Array.insert(sum, at: 0)
    }
    totalsum = Array.reduce(0,+)

    return totalsum
}

prumerdanehopredmetu(Numbers: [1,2,3], Numbers2: [1,2,3])  //error

更新

for i in Numbers.indices

这很有用。

3 个答案:

答案 0 :(得分:1)

您正在迭代数字([1, 2, 3]),而不是它们的索引(0, 1, 2)。试试这个:

var sum = Int()
var sums = [Int]()
var totalsum = Int()

func prumerdanehopredmetu(_ numbers: [Int], _ numbers2: [Int]) -> Int {

    for i in numbers.indices {
        sum = numbers[i] * numbers[i]
        sums.append(sum)
    }

    totalsum = Array.reduce(0,+)

    return totalsum
}

prumerdanehopredmetu([1,2,3], [1,2,3])

虽然有更简单/更简单的方法。您可以使用zipmap

let products = zip([1, 2, 3], [1, 2, 3]).map(*) // results in [1, 4, 9]
let sumOfProducts = products.reduce(0, +) // 14

答案 1 :(得分:0)

func multiply(array1: [Int], array2: [Int]) -> Int {
    if array1.count != array2.count {
        //error handler
        return 0
    } else {
      var i = 0
      var sum = 0
      while i < array1.count {
          sum = sum + array1[i]*array2[i]
          i = i + 1
      }
      return sum
    }
}

你应该考虑你的数组有不同数量的值。

答案 2 :(得分:0)

在你的循环中,&#34;我&#34;等于&#34;数字&#34;中的值,而不是&#34;数字&#34;的指数。以下是这样一个&#34; for&#34;循环在Swift中工作:

let myArray = ["John", "Timothy", "James", "Tanmay"]
for (index, value) in myArray.enumerated() {
    print(index) // 0, 1 ...
    print(value) // "John", "Timothy" ...
}

然而,您的代码需要&#34; i&#34;是0,1,2 ......

在Swift中,你也可以通过枚举数组来迭代遍历数组的索引和值:

let myArray = ["John", "Timothy", "James", "Tanmay"]
for i in myArray.indices {
    print(i) // 0, 1 ...
}

当然,在Swift中,您还可以通过查找数组的索引来遍历 只需 索引:

func prumerdanehopredmetu(Numbers:[Int], Numbers2:[Int]) -> Int {
    for i in Numbers.indices {
        sum = Numbers[i] * Numbers2[i]
        Array.insert(sum, at: 0)
    }
    totalsum = Array.reduce(0,+)

    return totalsum
}

因此,为了使您的代码有效,您必须遍历&#34; Numbers&#34;的索引,而不是值:

{{1}}