You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript猜数字游戏异常:无法命中答案且陷入无限循环

猜数字游戏问题排查与修复

核心问题分析

你的代码存在两个关键问题:

  1. 随机数每次循环都会重新生成:randNumber定义在while(true)循环内部,用户每提交一次猜测,程序就会生成一个新的目标数字,导致永远无法命中正确答案,循环无法终止。
  2. 未处理用户取消输入的情况:当用户点击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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 18:54:54