如何设置while循环条件,使其在任意一个判断不成立时立即终止
问题根源
两个核心错误导致现有逻辑不符合预期:
- 原有循环条件存在逻辑缺失:
a && b < bestof.value由于运算符优先级规则,等价于(a) && (b < bestof.value),仅判断了b是否小于对局上限,对a只做了真值校验,没有和bestof.value做大小比较,因此无法在a超过上限时及时终止循环。 - 后续修改的
while(a || b < bestof.value)逻辑完全相反:逻辑或||的规则是只要任意一个条件成立,整体就为真,这会导致只要a为真值或者b小于上限,循环就会一直运行,必然触发死循环导致调用栈溢出。
解决方案
你需要的效果是「只要a、b任意一个大于等于对局上限就终止循环」,反过来推导,循环持续运行的前置条件就是a和b同时小于对局上限,因此修改为如下代码即可:
if (checkBox.checked) { while (a < bestof.value && b < bestof.value) { myFunction(); } }
注意事项
- 要保证
myFunction()执行过程中会更新a或b的数值,如果两个值一直没有变化,无论条件怎么写都会进入死循环。 - 如果
a、b或bestof.value可能存在非数值的情况,建议先做类型校验,避免比较运算出现非预期结果。
内容的提问来源于stack exchange,提问作者JacobVerDugt
相关产品推荐
相关产品推荐

