在Swift Playground中如何编写数值逐天翻倍的while循环?
问题原因定位
你遇到的无限执行问题基本是以下两种常见错误导致的:
- 循环终止条件设置错误,比如没有给计数变量做递增,导致永远达不到终止阈值
- 金额变量的翻倍逻辑写在了循环条件判断的位置,而非循环体内部,触发死循环
常见错误写法示例(会触发死循环):
var day = 1 var dailyPenny = 1 // 错误:没有在循环内给day做递增,day永远等于1,永远满足<=30的条件 while day <= 30 { print(dailyPenny) dailyPenny *= 2 }
正确实现代码
按30天的常规月份计算,正确可运行的实现如下:
// 初始化:第一天的便士数额为1 var dailyPenny = 1 // 初始化:月末累计总额 var totalPenny = 0 // 固定范围for-in循环从根源避免死循环 for day in 1...30 { print("第\(day)天便士数额:\(dailyPenny)") totalPenny += dailyPenny // 当日统计完成后再翻倍计算下一日数额 dailyPenny *= 2 } print("月末总便士数额:\(totalPenny),换算为英镑为:\(Double(totalPenny)/100)")
代码说明
- 用固定范围的
for-in循环替代手动计数的while循环,可完全避免计数变量未更新导致的死循环问题 - 翻倍逻辑放在每日金额统计完成之后,不会出现首日金额计算错误的问题
- 如需适配不同天数的月份,只需要把
1...30的上限修改为对应月份的天数即可,支持28、29、31天的月份适配
内容的提问来源于stack exchange,提问作者Bishal
相关产品推荐
相关产品推荐

