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




