Arrays 我的平均函数有什么问题?迅速地
我试图编写一个函数,当我调用它时,它返回一个数字数组的平均值。这是我到目前为止所知道的,但现在我不知道为什么这不起作用。有什么建议吗Arrays 我的平均函数有什么问题?迅速地,arrays,swift,function,average,mean,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(counte
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
}
有两个问题: 因为arr中的i枚举数组元素,而不是数组索引。 因此,我而不是arr[i]是您想要添加到 运行sum和arr[i]可能会因索引超出范围异常而崩溃。 var average=average/arr.count定义一个局部变量 在if块的范围内,它隐藏具有相同名称的外部变量。换句话说,该赋值不会修改 最终从函数返回的平均变量。 解决这两个问题
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
}
在for-each循环中不需要计数器。 此外,您不能两次声明平均变量,只需在开始时初始化一次即可。 试一试
通常你不需要整数的平均值,因为它不是真正的平均值 例:[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)
}
我代表什么?因为我在arr中,然后arr[i]看起来很可疑。总的来说,这是有史以来计算平均值最长、最复杂的方法。你还有两个独立的变量,叫做average。这也有助于更好地命名你的变量。两个平均值变量中的第一个变量应命名为sum,因为它是运行总数,而不是平均值。另一个错误:Int数组的平均值可能不是Int。例如,平均值[1,2]==1.5
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)
}