为何无论输入什么数字,这段JS猜数比较函数始终返回false?
问题分析:你的比较函数始终返回false的原因
核心问题是计算猜测与秘密数字的差值时没取绝对值。secretNumber - guess得到的是带正负号的数值,当猜测值大于秘密数字时结果为负,直接比较大小会完全偏离“距离远近”的判断逻辑。
拿你测试的compareGuesses(1, 10, 2)举例:
- 人类猜测差值:
2 - 1 = 1 - 计算机猜测差值:
2 - 10 = -8
此时判断-8 > 1不成立,函数进入else分支返回false,但实际人类猜测离秘密数字更近,应该返回true。
修复方案很简单:用Math.abs()获取差值的绝对值,这样比较的是两者到秘密数字的实际距离:
const compareGuesses = (humanGuess, computerGuess, secretNumber) => { const humanDiff = Math.abs(secretNumber - humanGuess); const computerDiff = Math.abs(secretNumber - computerGuess); // 人类赢的条件:距离更小,或者相等时也判定人类赢(可根据需求调整) return humanDiff <= computerDiff; }; console.log(compareGuesses(1, 10, 2)); // 现在会返回正确结果true
另外提个小细节:你用var声明变量的写法没必要,直接返回判断结果更简洁,而且const/let比var的作用域更清晰安全。
内容的提问来源于stack exchange,提问作者Liam Okeeffe
相关产品推荐
相关产品推荐

