Hacking With Swift的while循环测试结果是否有误?代码打印行数存疑
解析Swift while循环的打印行数问题
先把问题中的代码贴出来:
var number: Int = 10 while number > 0 { number -= 2 if number % 2 == 0 { print("\(number) is an even number.") } }
逐次拆解循环执行过程
我们一步一步走,每一次循环都明确记录number的变化和打印情况:
第一次循环
- 初始
number = 10,满足number > 0,进入循环 - 执行
number -= 2,number变成8 - 8是偶数,打印
8 is an even number.→ 第1行
- 初始
第二次循环
- 当前
number = 8,满足number > 0,进入循环 number减2变成6- 6是偶数,打印 → 第2行
- 当前
第三次循环
- 当前
number = 6,满足条件,进入循环 number减2变成4- 4是偶数,打印 → 第3行
- 当前
第四次循环
- 当前
number = 4,满足条件,进入循环 number减2变成2- 2是偶数,打印 → 第4行
- 当前
第五次循环
- 当前
number = 2,满足number > 0,进入循环 number减2变成0- 0是偶数(0能被2整除),打印
0 is an even number.→ 第5行
- 当前
循环终止时机
第五次循环结束后,number的值是0。下一次判断while number > 0时,0不大于0,循环停止。
为什么之前会有误解?
- 你以为循环在
number为2时停止,但实际上number=2仍然满足>0的条件,会进入最后一次循环,把number减到0并打印。 - ChatGPT的错误在于漏算了0的打印——0是偶数,符合
number % 2 == 0的判断条件,所以第五次循环会触发打印。
所以Hacking With Swift的答案是对的,这段代码确实会打印5行内容。
内容的提问来源于stack exchange,提问作者Rob
相关产品推荐
相关产品推荐

