Node.js猜数字游戏故障排查请求:程序无法正常运行
猜数字游戏故障排查与修复
核心故障原因
类型不匹配导致比较逻辑失效
Math.random() * 100调用toFixed(0)后返回的是字符串类型,prompt获取的用户输入同样是字符串。直接用>或<比较字符串会按字典序(比如"10"会被判定小于"2"),完全不符合数值比较的预期。循环逻辑不完整
当前代码只在第一次判断失败后调用一次sprawdzacz,如果第二次输入仍然错误,程序就会终止,无法持续让用户猜测直到猜对。而且函数内新获取的用户输入没有再次进入判断流程,直接返回false,等于白输入。相等判断的变量引用错误
最后一个判断猜对的if语句,错误使用了全局变量wylosowanaLiczba和liczbaUzytkownika,而非函数的参数wylosowanaLiczbaxx和liczbaUzytkownikaxx。当函数内更新了局部输入变量时,全局变量不会同步,导致即使输入正确也可能无法触发成功提示。随机数生成范围不准确
Math.random() * 100生成的是0到99.999...的浮点数,toFixed(0)后最大只能得到99,无法生成100,不符合需求中的0-100范围。
修复后的代码
const prompt = require('prompt-sync')({ sigInt: true }); // 生成0-100的整数随机数 let wylosowanaLiczba = Math.floor(Math.random() * 101); function sprawdzacz(wylosowanaLiczba, liczbaUzytkownika) { // 将用户输入转为整数 const userNum = parseInt(liczbaUzytkownika, 10); if (isNaN(userNum)) { console.log('\n请输入有效的数字!\n'); return false; } if (wylosowanaLiczba > userNum) { console.log('\nWylosowana liczba jest większa niż twoja liczba!\n'); return false; } else if (wylosowanaLiczba < userNum) { console.log('\nWylosowana liczba jest mniejsza niż twoja liczba!\n'); return false; } else { console.log('\n\nBRAWO, WYGRALES\n\n'); return true; } } // 循环直到猜对 let isCorrect = false; while (!isCorrect) { let liczbaUzytkownika = prompt('Podaj liczbę od 0 do 100: '); isCorrect = sprawdzacz(wylosowanaLiczba, liczbaUzytkownika); }
修复说明
- 统一数值类型:用
Math.floor(Math.random() * 101)直接生成整数类型的随机数,用户输入用parseInt转为整数,确保比较是数值层面的。 - 完善循环逻辑:使用
while循环持续获取用户输入并校验,直到猜对为止。 - 修正变量引用:函数内统一使用参数和局部变量,避免全局变量的干扰。
- 增加输入合法性校验:判断用户输入是否为有效数字,避免非数字输入导致的错误。
内容的提问来源于stack exchange,提问作者xMixerek
相关产品推荐
相关产品推荐

