2017-01-10 1 views
-1

2 개의 매개 변수가있는 함수가 있습니다. Int의 배열은 Numbers 및 Numbers1입니다. Numbers의 각 요소를 "i"인덱스에 곱하고 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

당신의 간격은 ... 광고입니다. – Alexander

+1

변수 및 매개 변수 이름은 Swift API 디자인 지침에 따라 'lowerCamelCase'여야합니다. 'Array.reduce (0, +)'는 달리 Array 형의 별난 정적 호출처럼 보입니다. – Hamish

+1

아마도'for i in 0 ... '을 의미했을 것입니다.

답변

0

루프에서 "i"는 "숫자"의 값이 아니라 "숫자"의 인덱스와 같습니다. 반면

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

, 코드가 기대하는 "이"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 
    } 
} 

당신은 당신의 배열 값의 다른 수를 고려해야합니다.

관련 문제