Как я могу создать функцию, которая добавляет пустой массив?

#arrays #swift #function

Вопрос:

 // I am attempting to answer the following question:
 

Если мы перечислим все натуральные числа ниже 10, кратные 3 или 5, мы получим 3, 5, 6 и 9. Сумма этих кратных равна 23.

 //Find the sum of all the multiples of 3 or 5 below 1000.



// function creating both integers, max number, and filtering 
func sumOfMultiples(x: Int, y: Int, n: Int)  {
    var numberList: [Int] = []
    for i in 0..<y {
        if x < n amp;amp; y < n amp;amp; x % n == 0 || y % n == 0 {
            return numberList.append(i)
        }
    
    } 
}


sumOfMultiples(x: 3, y: 5, n: 1000)
 

Комментарии:

1. Не используйте возврат return . И где вы подводите итоги?

2. Решение ЧП №1 ?

3. Входит ли в требования запись списка всех номеров? Если нет, вы можете просто продолжать добавлять «сумму» каждый раз по кругу и возвращать ее

4. Не могли бы вы подробнее рассказать, где и почему вам нужно добавить пустой массив? В худшем случае вы можете объявить массив типа [Любой], а затем просто добавить([])

5. @MartinR Да!!! В настоящее время я работаю над exercism.io

Ответ №1:

Я не уверен, чего пытается достичь ваш код, но он не может работать по нескольким причинам.

Вот некоторый рабочий код, который достигает этого:

 func sumOfMultiples(x: Int, y: Int, n: Int)->Int {
    var returnValue: Int = 0

    if x < n amp;amp; y < n {
        for i in 0..<n {
            if i % x == 0 || i % y == 0 {
                returnValue  = i
            }
        }
    }

    return returnValue
}

print(sumOfMultiples(x: 3, y: 5, n: 1000))
 

Выход:

 233168
 

Проблемы в опубликованном вами коде заключаются в следующем:

  • Функция не имеет возвращаемого типа (это функция void). Я добавил ->Int , чтобы вернуть целое число.
  • Функция хранит список целых чисел — почему? Если требуется только сумма, сохраните значение в an Int и верните его.
  • for Цикл продолжается до тех пор, пока y . На самом деле, так и должно быть n .
  • Сравнение для x и y ниже n выполняется в каждой итерации цикла. Не нужно тратить ресурсы впустую — сделайте это до цикла.
  • Операция по модулю ( x % n и y % n ) недопустима для варианта использования. Это на самом деле i % x и i % y потому, что вы тестируете i в каждом конкретном случае.

Комментарии:

1. Проверки для x < n amp;amp; y < n этого не нужны. Существует также специальный метод isMultiple(of:) для проверки делителей.

2. Мартин, ты не помог оператору придумать решение, ты дал им готовое решение. Это звучит как домашнее задание, и если вы просто дадите полный ответ, ОП не будет учиться.

Ответ №2:

Если результат, который вы хотите, является суммой всех чисел:

 func sumOfMultiples(x: Int, y: Int, n: Int) -> Int {
    var result = 0
    for number in 1..<n {
        if number % x == 0 || number % y == 0 {
            result  = number
        }
    }
    return result
}
 

Если вы хотите получить массив со всеми числами:

 func arrayOfMultiples(x: Int, y: Int, n: Int) -> [Int] {
    var result: [Int] =  []
    for number in 1..<n {
        if number % x == 0 || number % y == 0 {
            result.append(number)
        }
    }
    return result
}
 

Вы также можете использовать пользовательский диапазон в качестве параметра, например:

 func sumOfMultiples(x: Int, y: Int, n: ClosedRange<Int>) -> Int {
    var result = 0
    for number in n {         //Notice the change from 1..<n to just n
...
}

func arrayOfMultiples(x: Int, y: Int, n: ClosedRange<Int>) -> [Int] {
    var result: [Int] =  []
    for number in n {         //Notice the change from 1..<n to just n
...
}
 

и назови это так:

 sumOfMultiples(x: 3, y: 5, n: 10...20)
//Result is 75

arrayOfMultiples(x: 3, y: 5, n: 10...20)
//Result is [10, 12, 15, 18, 20]
 

Комментарии:

1. Большое вам СПАСИБО!!!!! Я действительно ценю, что вы нашли время, чтобы показать мне, как решить эту проблему, используя как массив, так и сумму. Вы также только что познакомили меня с пользовательскими диапазонами — спасибо!