计算参数的平均值

时间:2016-01-21 23:33:23

标签: swift function swift2 double

我正在通过" Swift编程语言"和相关的游乐场文件。

我有一个部分,我被问到: 编写一个计算其参数平均值的函数。

鉴于上下文,这是我的解决方案

func averageOf(numbers: Int...) -> Int {
    var sum = 0
    var countOfNumbers = 0
    for number in numbers {
        sum += number
        countOfNumbers += 1
    }
    var result: Double = Double(sum) / Double(countOfNumbers)
    return result
}

averageOf()
averageOf(10, 20, 30)

正如你所看到的,我必须将结果称为Double(即sum / countOfNumbers)。

但是,在这种情况下我无法返回结果,因为我收到有关转换类型" Double"的返回表达式的错误。

然后我尝试返回Double(结果)但没有成功。

为什么这不起作用,我怎样才能最好地理解我在这里做错了什么?

4 个答案:

答案 0 :(得分:3)

只是查看你的代码(而不是通过许多巧妙的方式给你另一个来计算):你的函数需要返回类型Int,但是你返回Double

下面是带有注释更正的代码:

func averageOf(numbers: Int...) -> Double {
    var sum = 0                  // ^ note the return type here
    var countOfNumbers = 0
    for number in numbers {
        sum += number
        countOfNumbers += 1
    }
    /* Note here: you declare 'result' to be of type Double */
    var result: Double = Double(sum) / Double(countOfNumbers)
    return result /* and return 'result'; hence returning a Double */
}

averageOf(10, 20, 30) // 20.0 <-- a Double

答案 1 :(得分:1)

如果查看函数定义,则返回Int(返回参数位于->之后。

func averageOf(numbers: Int...) -> Int

如果您想要返回Double或将结果转换为Double,请将其更改为Int

答案 2 :(得分:1)

在Swift 3中......

使用variadic参数:

func averageOf(_ n: Int...) -> Double {
    return Double(n.reduce(0, +)) / Double(n.count)
}

averageOf() // nan
averageOf(0) // 0
averageOf(1, 2, 3, 4) // 2.5

使用数组参数(guard为空数组):

func averageOf(_ n: [Int]) -> Double {
    guard n.count > 0 else { return 0 }
    return Double(n.reduce(0, +)) / Double(n.count)
}

averageOf([Int]()) // 0
averageOf([1, 2, 3, 4]) // 2.5

答案 3 :(得分:0)

您的函数声明为返回Int:

func averageOf(numbers: Int...) -> Int {

您无法返回Double,因为它与此签名不匹配。您可以在返回之前转换回Int,或者更改函数签名。