计算器未采用平均值

时间:2018-10-05 06:38:57

标签: swift macos terminal

我当时在Swift上编写计算器应用程序,而我对Swift还是很陌生。因此,我对语法和所有内容一无所知。当我调试我的代码时,我得到了错误并且代码的错误被0除。我已经调试了所有东西,但是我不知道如何解决它,任何帮助将不胜感激,我只是从Swift和iOS开始。我正在编写的应用程序是针对mac终端的,因此我的程序从字符串中获取用户输入,然后将其转换为int。

这是我正在使用的代码

    var average = 0;
    let count = nums.count - 1

    for index in 0...nums.count - 2 {
        let nextNum = Int(nums[index])
        average += nextNum!
    }

    return average / count
}

3 个答案:

答案 0 :(得分:1)

您要从数组元素计数中减去1,我认为是因为从零开始的编号会影响它,但是在这种情况下是不需要的。

您应该检查一个空数组,因为这将导致被零除。您也可以使用reduce来简单地将一个数字数组求和,然后除以计数。

func average(of nums: [Float]) -> Float? {
    let count = nums.count
    if (count == 0) { return nil }
    return nums.reduce(0, +) / Float(count)
}

答案 1 :(得分:0)

除数可能为0。如@MartinR所说,如果nums中只有1个对象,则count = nums.count -1将为零,而1 / 0为未定义状态。 / p>

又一个问题,我发现您循环使用0...nums.count - 2,但应该是0...nums.count - 1。您也可以写少于条件的条件作为

0..<nums.count0..<count 使用

var average = 0;
let count = nums.count

for index in 0..<count {
    let nextNum = Int(nums[index])
    average += nextNum!
}

return average / count

您可以对优化的解决方案使用快速的高阶函数,即使您的nums数组中没有任何数字,平均值也将返回0。为:

let count = nums.count
let avg = nums.reduce(0, +) / count

答案 2 :(得分:0)

尝试一下:

var sum = 0;
let count = nums.count

for index in 0...nums.count - 1 {
    let nextNum = Int(nums[index])
    sum += nextNum!
}

return count != 0 ? sum/count : 0