JavaScript猜数字游戏异常:无法命中答案且陷入无限循环
猜数字游戏问题排查与修复
核心问题分析
你的代码存在两个关键问题:
- 随机数每次循环都会重新生成:
randNumber定义在while(true)循环内部,用户每提交一次猜测,程序就会生成一个新的目标数字,导致永远无法命中正确答案,循环无法终止。 - 未处理用户取消输入的情况:当用户点击prompt的「取消」按钮时,
userGuess会变为null,经parseInt转换后得到NaN,此时会触发错误输入提示,但循环会持续执行,造成无限循环的假象。
修复后的代码
将随机数生成逻辑移到循环外部,确保整个游戏过程中目标数字唯一,同时添加取消输入的处理:
// 修改猜数字游戏,限定猜测范围为50-150,且禁止输入范围外的数字 // 目标数字仅生成一次,放在循环外部 const randNumber = Math.floor(Math.random() * 101) + 50; while (true) { let userGuess = prompt("Guess the Number: (50-150)"); // 处理用户取消输入的场景,直接退出游戏 if (userGuess === null) { console.log("游戏已退出"); break; } userGuess = parseInt(userGuess); if (!isNaN(userGuess) && userGuess >= 50 && userGuess <= 150) { if (userGuess === randNumber) { console.log("congrats! right guess"); break; } else if (userGuess < randNumber) { console.log("Try large Number"); } else if (userGuess > randNumber) { console.log("Try small number"); } } else { console.log("Wrong input. Try a valid Number between (50-150)"); } }
优化说明
- 将
randNumber声明为const,符合其值不可变的语义 - 使用
===严格相等运算符进行比较,避免类型转换引发的潜在问题 - 新增用户取消输入时的退出逻辑,提升交互体验
内容的提问来源于stack exchange,提问作者Saiful Bashar
相关产品推荐
相关产品推荐

