You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

JavaScript无数组二分查找实现猜数字游戏求助

电脑猜数字游戏(二分查找实现)

嘿,刚接触JavaScript就敢挑战这个猜数字游戏,真不错!我来帮你搞定这个电脑猜数的逻辑,完全贴合你要求的技术点——用if-else、confirm、while循环,还有不用数组的二分查找~

核心思路拆解

咱们先理清楚怎么用二分查找快速缩小范围:

  • 一开始设定数字范围是0到100,用min存最小值,max存最大值
  • while循环持续猜数,直到猜中为止
  • 每次取当前范围的中间值当猜测数,这是二分查找的核心,能最快压缩范围
  • confirm弹框获取用户反馈:先问是不是这个数,如果不是,再问数字是否比当前猜测的大,根据反馈调整范围边界

完整代码实现

// 初始化猜数范围
let min = 0;
let max = 100;
let hasGuessedRight = false;

// 先给用户提示
alert("请在心里想一个0到100之间的整数,我马上开始猜!");

// 循环猜数,直到猜中
while (!hasGuessedRight) {
  // 计算当前范围的中间值,用Math.floor取整避免小数
  const currentGuess = Math.floor((min + max) / 2);
  
  // 第一个问题:是不是这个数字
  const isCorrect = confirm(`你想的数字是 ${currentGuess} 吗?`);
  
  if (isCorrect) {
    alert(`耶!我猜中啦🥳 你的数字就是 ${currentGuess}!`);
    hasGuessedRight = true;
  } else {
    // 第二个问题:数字比当前猜测的大吗?
    const isBigger = confirm(`你的数字比 ${currentGuess} 大吗?`);
    
    if (isBigger) {
      // 如果更大,就把最小值调到当前猜测+1,缩小范围
      min = currentGuess + 1;
    } else {
      // 如果更小,就把最大值调到当前猜测-1
      max = currentGuess - 1;
    }
    
    // 加个边界检查:防止用户给矛盾反馈导致范围乱掉
    if (min > max) {
      alert("哎呀,你是不是记错自己想的数字啦?我的范围已经乱套了😅");
      hasGuessedRight = true;
    }
  }
}

代码细节唠唠

  • Math.floor((min + max)/2):因为JS里整数相除会得到小数,用floor把它转成整数,完全符合咱们0-100整数的要求
  • confirm函数:用户点「确定」返回true,点「取消」返回false,刚好用来接收用户的反馈,不用额外处理复杂输入
  • while (!hasGuessedRight):只要没猜中就一直循环,直到hasGuessedRight变成true才结束游戏
  • 边界检查:怕用户故意给矛盾的反馈(比如明明想的是50,第一次猜30说不是还说比30小,之后又说比15大),这时候范围会出现min > max,就提示用户,避免死循环

这样写出来的代码完全符合你的要求,而且逻辑清晰,新手也能看懂每一步在做什么~

内容的提问来源于stack exchange,提问作者Elisabeth

火山引擎 最新活动