我的平均功能有什么问题?在迅速

时间:2017-02-18 18:16:53

标签: arrays swift function average mean

我正在尝试编写一个函数,当我调用它时,返回数组数组的平均值(平均值)。这是我到目前为止所做的,但现在对于为什么这不起作用一无所知。有什么建议?

func average(Array arr: [Int]) -> Int{
    var average = 0
    var counter = 0
    for i in arr{

        average = arr[i] + average
        counter = counter + 1
        if(counter == arr.count){
            var average = (average / arr.count)
        }
    }
    return average
}

3 个答案:

答案 0 :(得分:2)

有两个问题:

  • for i in arr枚举数组元素,而不是数组索引。 因此,您要添加i而不是arr[i] 运行总和(arr[i]可能会因索引超出范围异常而崩溃。)
  • var average = (average / arr.count)定义了一个局部变量 在if-block的范围内,它隐藏了具有相同名称的外部变量。换句话说,该分配不会修改 最终从函数返回的average变量。

修复这两个问题

func average(arr: [Int]) -> Int{
    var average = 0
    var counter = 0
    for elem in arr {
        average = elem  + average
        counter = counter + 1
        if(counter == arr.count){
            average = (average / arr.count)
        }
    }
    return average
}

有效(但当然会将结果截断为整数 由于使用了整数除法):

print(average(arr: [1, 2, 4])) // 2

该功能可以简化为

func average(arr: [Int]) -> Int{
    var sum = 0
    for elem in arr {
        sum += elem
    }
    return sum / arr.count
}

进一步

func average(arr: [Int]) -> Int{
    return arr.reduce(0, +) / arr.count
}

答案 1 :(得分:0)

每个循环中都不需要计数器。 你也不能两次声明你的平均变量只是在开始时初始化它一次。 试试

func average(Array arr: [Int]) -> Int{
    var avg = 0
    var sum = 0
    for i in arr{

        sum = i + sum

    }
    avg = sum / arr.count
    return avg
}

答案 2 :(得分:0)

一般来说,你不需要整数的均值,因为它不是真正的意思。

ex:[2,3]的平均值会用整数吐出2

您也可以使用reduce函数简化代码。

var arr: [Double] = [...]
if arr.count > 0 {
  arr.reduce(0, +)/Double(arr.count)
}

就你的功能而言,这应该有效

func average(_ arr: [Double]) -> Double {
  if arr.count == 0 { return 0 }
  var average = 0.0
  for i in arr {
    average += i
  }
  return average/Double(arr.count)
}