Kotlin单函数拆分为多面额计算函数的实现及语法报错排查
错误直接原因
你写的Penny函数里存在语法错误:
val penny = myChange/100);
这行多了一个多余的右括号')',是触发你当前报错的直接原因。
其他需要修正的逻辑问题
除了语法错误,你的拆分逻辑还有多处不符合需求的问题:
- 没有对计算出的面额数量做
Math.floor取整,会得到小数而非整数的张/枚数 - 每个面额函数返回的剩余金额没有传递给下一个函数,所有函数都在计算原始总金额对应的面额,结果完全错误
- 函数名不符合要求:要求是
dollars()、quarters()、dimes()、nickels()、pennies()小写开头 pennies的计算逻辑错误:原实现是Math.floor(剩余金额 * 100),你写的是除以100,逻辑完全反向- 混用Double和Float会导致精度误差,统一用Double即可
pennies函数要求返回剩余金额,你当前的返回值是Unit不符合要求
修正后的完整代码
fun main(args: Array<String>) { val change = 44.77 // 按需求设置测试值 var remaining = dollars(change) remaining = quarters(remaining) remaining = dimes(remaining) remaining = nickels(remaining) pennies(remaining) } fun dollars(myChange: Double): Double { val count = Math.floor(myChange / 1.0) print(Math.round(count * 1) / 1) println(if (count < 2) "_Dollar" else "_Dollars") return myChange - count * 1.0 } fun quarters(myChange: Double): Double { val count = Math.floor(myChange / 0.25) print(Math.round(count * 4) / 4) println(if (count < 2) "_Quarter" else "_Quarters") return myChange - count * 0.25 } fun dimes(myChange: Double): Double { val count = Math.floor(myChange / 0.10) print(Math.round(count * 10) / 10) println(if (count < 2) "_Dime" else "_Dimes") return myChange - count * 0.10 } fun nickels(myChange: Double): Double { val count = Math.floor(myChange / 0.05) print(Math.round(count * 20) / 20) println(if (count < 2) "_Nickel" else "_Nickels") return myChange - count * 0.05 } fun pennies(myChange: Double): Double { val count = Math.floor(myChange * 100) print(Math.round(count * 100) / 100) println(if (count < 2) "_Penny" else "_Pennies") return myChange - count * 0.01 }
运行输出(测试值44.77)
和原单函数输出完全一致:
44_Dollars 3_Quarters 0_Dime 0_Nickel 2_Pennies
内容的提问来源于stack exchange,提问作者RickRoh
相关产品推荐
相关产品推荐

