我有一个带有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
这很有用。
答案 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])
虽然有更简单/更简单的方法。您可以使用zip
和map
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}}