无法在单个循环中更新多个累加器

时间:2018-08-31 20:25:58

标签: arrays swift function

该函数接受输入的“变化”,并返回要退还给客户的四分之一硬币,硬币,镍币和几美分的细分。

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

  1. 检查是否有变化>季度。如果是,则减去$ 0.25。每次减去四分之一,就将四分之一累加器加1。重复直到不再从剩余的更改值中减去四分之一为止。 (这将导致2个季度)
  2. 此步骤后,剩余零钱为$ 0.12
  3. 移动到角钱-每次从更改中减去一角钱,就向角钱累加器加1。
  4. 重复镍和几分钱

虽然我可以轻松地遍历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."

}

1 个答案:

答案 0 :(得分:0)

我相信这样做不会循环。

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."
}