计算参数的平均值
Calculating the Average of Arguments
我正在研究 "The Swift Programming Language" 和相关的 playground 文件。
我有一个部分被问到:
编写一个计算其参数平均值的函数。
鉴于上下文,这是我的解决方案
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(即总和/countOfNumbers)。
但是,在这种情况下我无法 return 结果,因为我在转换 return 类型 "Double" 表达式时遇到错误。
然后我尝试 return Double(result) 但没有成功。
为什么这不起作用,我怎样才能最好地理解我在这里做错了什么?
只看你的代码(并没有给你另一个,从许多巧妙的方法中,计算这个):你的函数需要 return 类型 Int
,但是你 return 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
您的函数声明为 returnInt:
func averageOf(numbers: Int...) -> <i><b>Int</b></i> {
您不能 return Double,因为它与此签名不匹配。您可以在 returning 之前转换回 Int,或者更改函数签名。
如果你看一下你的函数定义,它是return一个Int
(return参数在->
之后。
func averageOf(numbers: Int...) -> Int
如果您想 return Double
或在 returning[=16= 之前将结果转换为 Int
,请将其更改为 Double
]
在Swift 3...
使用可变参数:
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
我正在研究 "The Swift Programming Language" 和相关的 playground 文件。
我有一个部分被问到: 编写一个计算其参数平均值的函数。
鉴于上下文,这是我的解决方案
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(即总和/countOfNumbers)。
但是,在这种情况下我无法 return 结果,因为我在转换 return 类型 "Double" 表达式时遇到错误。
然后我尝试 return Double(result) 但没有成功。
为什么这不起作用,我怎样才能最好地理解我在这里做错了什么?
只看你的代码(并没有给你另一个,从许多巧妙的方法中,计算这个):你的函数需要 return 类型 Int
,但是你 return 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
您的函数声明为 returnInt:
func averageOf(numbers: Int...) -> <i><b>Int</b></i> {
您不能 return Double,因为它与此签名不匹配。您可以在 returning 之前转换回 Int,或者更改函数签名。
如果你看一下你的函数定义,它是return一个Int
(return参数在->
之后。
func averageOf(numbers: Int...) -> Int
如果您想 return Double
或在 returning[=16= 之前将结果转换为 Int
,请将其更改为 Double
]
在Swift 3...
使用可变参数:
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