do-while循环不符合预期:返回1而非7的问题排查
问题分析:为什么你的do-while循环返回1而非7?
你写的第一个do-while代码存在语法结构错误,导致逻辑完全偏离预期。先拆解错误代码的执行流程:
const getNextEventCountTest = () => { let sum = 0; let q = 0; do { sum = sum + 0.5 } while (sum < 4){ q = q + 1; } return q; };
错误代码的实际执行步骤:
- do-while循环单独执行:先反复执行
sum +=0.5,直到sum >=4(也就是sum变成4的时候),循环才停止。这个过程中q完全没变化,始终是0。 - 独立代码块执行一次:循环结束后,后面的
{ q = q+1; }是一个和循环无关的独立代码块,只会执行一次,所以q变成1,最终返回1。
你误以为q++是循环的一部分,但实际上你写错了do-while的结构——do-while的正确语法是do { 循环体 } while(条件);,循环体只能是do后面的大括号内容,while条件后不能再加另一个大括号,否则会被当成独立代码块。
正确的do-while写法(匹配你的预期逻辑)
要实现和while版本一样的效果,你需要把q++的判断放到do的循环体内,和while版本的逻辑对齐:
const getNextEventCountTest = () => { let sum = 0; let q = 0; do { sum += 0.5; if (sum < 4) { // 和while版本一致,仅当sum仍小于4时递增q q += 1; } } while (sum < 4); // 这里才是循环的终止条件 return q; };
这个版本的执行流程和你的while版本完全一致:每次先执行sum +=0.5,如果此时sum还小于4,就把q加1,直到sum等于4时停止循环,最终返回q=7。
内容的提问来源于stack exchange,提问作者Alexander Mills
相关产品推荐
相关产品推荐

