Калькулятор не принимает средний - PullRequest
0 голосов
/ 05 октября 2018

Я программировал приложение калькулятор на swift, и я очень новичок в swift.Так что я потерян с синтаксисом и всем.Когда я отлаживаю свой код и получаю ошибку деления кода на sayign на 0. Я отлаживал и все, но я не знаю, как ее решить, любая помощь будет принята с благодарностью, я только начинаю swift и iOS.Приложение, которое я делаю правильно, предназначено для терминала Mac, поэтому моя программа берет пользовательский ввод из строки и затем преобразует его в целое число.

Это код, с которым я работаю

    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 голосов
/ 05 октября 2018

Вы вычитаете одно из числа элементов массива, я полагаю, из-за того, что нумерация, основанная на нуле, влияет на него, но в этом случае нет необходимости.

Вы должны проверить пустой массив, так как этовызовет деление на ноль.Также вы можете использовать reduce для простого суммирования массива чисел и деления на количество.

func average(of nums: [Float]) -> Float? {
    let count = nums.count
    if (count == 0) { return nil }
    return nums.reduce(0, +) / Float(count)
}
0 голосов
/ 05 октября 2018

Давайте попробуем это:

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
0 голосов
/ 05 октября 2018

Может быть какая-то причина для делителя равным 0. Как сказал @MartinR, если в nums есть только 1 объект, тогда count = nums.count -1 будет нулем, а 1 / 0 - неопределенным состоянием.

OneЕще одна проблема, которую я обнаружил, что вы зациклились как 0...nums.count - 2, но это должно быть 0...nums.count - 1.Вы также можете написать его с условием меньше, чем

0..<nums.count или 0..<count Use,

var average = 0;
let count = nums.count

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

return average / count

Вы можете использовать быстрые функции высокого порядка для оптимизированного решения, которое будет возвращать0 в среднем, даже если у вас нет числа в вашем массиве nums.Как:

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