JS猜数字游戏while循环条件错误引发死循环问题排查
问题原因
内层用于校验重试输入的while循环使用了错误的逻辑运算符,导致循环判断条件恒为真,因此无论输入什么内容都无法退出循环。
逻辑错误拆解
原循环条件为go!="yes" || go!="no",使用了逻辑或运算符||,规则是只要任意一个子判断为真,整个条件就为真:
- 当用户输入
yes时:go!="yes"为假,但go!="no"为真,整体条件为真,循环继续运行 - 当用户输入
no时:go!="no"为假,但go!="yes"为真,整体条件为真,循环继续运行 - 当用户输入其他任意内容时:两个子判断全为真,整体条件仍为真,循环不会停止
这个条件从逻辑上永远不可能为假,属于典型的逻辑运算符误用。你实际需要的判断规则是:当用户输入的内容既不是yes也不是no时,才要求用户重新输入,对应的逻辑运算符应该替换为逻辑与
&&。
替换为&&后,只有两个子判断同时成立(即输入既不等于yes也不等于no)时,循环条件才为真,才会触发重输提示;只要输入是yes或者no,就会有一个子判断不成立,整体条件为假,循环就能正常退出。
另外代码里提示文案的retey是拼写错误,正确拼写为retry,属于不影响逻辑运行的小问题,可以同步修正。
修正后代码
// Ask user to retry while (guess != random) { let go = prompt("wrong guess -_-\nWould you like to retry? (yes/no)"); console.log(go) // 将||替换为&&,仅输入不符合要求时才停留在重输循环 while (go != "yes" && go != "no" ) { go = prompt("You must enter yes or no\nWould you like to retry? (yes/no)"); console.log(go,8) } if (go == "no") { break; } guess = parseInt(prompt("Enter your guess")); }
内容的提问来源于stack exchange,提问作者Ocean
相关产品推荐
相关产品推荐

