Arrays 在单个回路中更新多个蓄能器时遇到问题

Arrays 在单个回路中更新多个蓄能器时遇到问题,arrays,swift,function,Arrays,Swift,Function,这是一个函数,它接受输入“change”,并返回要返回给客户的25美分、10美分、5美分和1美分的明细 我的方法是:假设零钱是0.62美元 检查是零钱>四分之一。如果是,减去0.25美元。每次减去四分之一,四分之一累加器加1。重复此操作,直到无法再从剩余的更改值中减去四分之一。(这将导致两个季度) 此步骤后剩余的更改为$0.12 移到一角硬币上-每次从零钱中减去一角硬币时,在一角硬币累加器中加1 对镍币和便士重复上述步骤 虽然我可以轻松地遍历coinTray数组并减去值,但如何指示一旦数组移动到

这是一个函数,它接受输入“change”,并返回要返回给客户的25美分、10美分、5美分和1美分的明细

我的方法是:假设零钱是0.62美元

  • 检查是零钱>四分之一。如果是,减去0.25美元。每次减去四分之一,四分之一累加器加1。重复此操作,直到无法再从剩余的更改值中减去四分之一。(这将导致两个季度)
  • 此步骤后剩余的更改为$0.12
  • 移到一角硬币上-每次从零钱中减去一角硬币时,在一角硬币累加器中加1
  • 对镍币和便士重复上述步骤
  • 虽然我可以轻松地遍历coinTray数组并减去值,但如何指示一旦数组移动到下一个项目,就切换到下一个累加器并开始向其添加

    我在这里解决了这个问题,没有使用循环,但是有更有效的方法吗

    func breakdown(change: Double) -> String {
    
        var coinTray: [Double] = [0.25, 0.10, 0.05, 0.01]
        var totalChange = change
    
        var quarters = 0
        var dimes = 0
        var nickels = 0
        var pennies = 0
    
        while totalChange >= coinTray[0] {
            totalChange -= coinTray[0]
            quarters += 1
        }
    
        while totalChange >= coinTray[1] {
            totalChange -= coinTray[1]
            dimes += 1
        }
    
        while totalChange >= coinTray[2] {
            totalChange -= coinTray[2]
            nickels += 1
        }
    
        while totalChange >= coinTray[3] {
            totalChange -= coinTray[3]
            pennies += 1
        }
    
    return "You should have \(quarters) quarter(s), \(dimes) dime(s), \(nickels) nickel(s), and \(pennies) penny/ies."
    
    }
    

    我相信这在没有循环的情况下也能做同样的事情

    func breakDown(change: Double) -> String {
        var coinTray: [Double] = [0.25, 0.10, 0.05, 0.01]
        var totalChange = change
    
        var quarters = 0
        var dimes    = 0
        var nickels  = 0
        var pennies  = 0
    
        quarters    = Int(totalChange/coinTray[0])
        totalChange = totalChange.truncatingRemainder(dividingBy: coinTray[0])
        dimes       = Int(totalChange/coinTray[1])
        totalChange = totalChange.truncatingRemainder(dividingBy: coinTray[1])
        nickels     = Int(totalChange/coinTray[2])
        totalChange = totalChange.truncatingRemainder(dividingBy: coinTray[2])
        pennies     = Int(totalChange * 100)
    
        return "You should have \(quarters) quarter(s), \(dimes) dime(s), \(nickels) nickel(s), and \(pennies) penny/ies."
    }
    
    编辑:似乎OP想要这个答案

    var coinTray: [Double] = [0.25, 0.10, 0.05, 0.01]
    
    var quarters = 0
    var dimes   = 0
    var nickels = 0
    var pennies = 0
    
    var coins = [quarters, dimes, nickels, pennies]
    
    func breakDown(change: Double) -> String {
    
        var totalChange = change
        for i in 0..<coinTray.count {
            coins[i] = Int(totalChange/coinTray[i])
            totalChange = totalChange.truncatingRemainder(dividingBy: coinTray[i])
        }
        return "You should have \(quarters) quarter(s), \(dimes) dime(s), \(nickels) nickel(s), and \(pennies) penny/ies."
    }
    
    var coinTray:[Double]=[0.25,0.10,0.05,0.01]
    var四分之一=0
    变量dimes=0
    var镍币=0
    var pennies=0
    var硬币=[四分之一硬币、一角硬币、五分镍币、便士]
    func细分(更改:双)->字符串{
    var totalChange=变更
    
    对于0中的i.“我在这里解决了它,没有使用循环”,呃……您似乎在使用4。@RakeshaShastri是的,有4个while循环。但我想知道是否有办法将这些循环清理成一个循环,因为除了累加器之外,所有的循环都在重复。不使用任何循环如何?就像下面发布的答案一样?:)我已经编辑了答案。我想我明白您在寻找什么。但是这对于动态数量的变量是不实际的,在这种情况下,您必须使用元组数组,这对于这样一个简单的事情来说是复杂的。