2017-01-10 7 views
-1

私は、2つのパラメータ、つまりNumbersとNumbers1というIntの配列を持つ関数を持っています。私は、インデックス "i"のNumbersの各要素に、同じインデックスのNumbers2の各要素を掛けたいと考えています。次に、乗算の結果の総和を求めたいと思います。関数を呼び出すと、範囲外のエラーIndexが表示されます。コード怒鳴る:インデックスの範囲外 - 関数のエラー

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

あなたの間隔がある...創造。 – Alexander

+1

Swift APIデザインのガイドラインに従って、変数名とパラメータ名は「lowerCamelCase」にする必要があることに注意してください。 'Array.reduce(0、+)'は、そうでなければ 'Array'型の変わった静的呼び出しのように見えます。 – Hamish

+1

おそらく 'for i in 0 ..

答えて

0

"i"は "Numbers"のインデックスではなく、 "Numbers"の値と同じです。

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

あなたのコードは、「i」は0、1、2であることを期待し、一方で...

をスウィフトでは、あなたがすることもできます:ここではどのようなループは、スウィフトに働く「について」の例です。のインデックスを見つけることによって、だけ指標を通してスウィフトでは、あなたがすることができ、ループ、もちろん

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

:配列を列挙することによって、配列のインデックスと値をループのための反復を持っています配列:

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

だから、あなたのコードが機能するためには、あなたの必要があり、「数」の指標ではなく、値をループ:

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 
} 
1

インデックス(0, 1, 2)ではなく、数値([1, 2, 3])を反復しています。代わりにこれを試してみてください:

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 
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 
    } 
} 

ことができます。

関連する問題