JavaScript控制台猜数字游戏无输出问题求助
解决你的猜数字游戏无输出问题
嘿,刚学JavaScript遇到这种小bug太正常啦!我帮你梳理下代码里的几个关键问题,改完就能正常运行了:
问题1:变量声明语法错误
你写的Boolean isPlaying = true;不是JavaScript的正确写法哦!JS里声明布尔类型变量直接用let或var就行,不用加Boolean前缀,改成:
let isPlaying = true;
问题2:随机数生成逻辑完全错误
Math.floor(Math.random(10) * 1)这行的问题很大:
Math.random()不需要传参数,它默认返回0到1(不包含1)的随机小数- 要生成1到10的整数,应该先乘10得到0-10(不包含10)的数,取整后加1,改成:
let randInt = Math.floor(Math.random() * 10) + 1;
原来的写法永远会得到0,而你让用户猜1-10的数,永远不可能猜对,循环会一直卡着!
问题3:prompt返回字符串,未转数字
prompt()返回的是字符串类型,直接和数字randInt比较会有潜在问题(比如用户输入非数字时会出逻辑错误),所以要把输入转成数字:
guess = Number(prompt("Enter a guess between 1 & 10: "));
问题4:外部循环无法访问内部变量
你在runGame()函数里声明的isPlaying是局部变量,外面的while (isPlaying == true)根本访问不到这个变量,会直接报错导致代码不执行!可以改成让runGame()返回一个布尔值,告诉外部是否继续玩。
修正后的完整代码
function runGame() { let tries = 3; let guess = 0; // 正确生成1-10的随机数 let randInt = Math.floor(Math.random() * 10) + 1; alert("You have 3 chances to guess a number between 1 & 10!"); while (guess !== randInt && tries > 0) { // 把输入转成数字,同时处理用户取消输入的情况 guess = Number(prompt("Enter a guess between 1 & 10: ")); if (guess === null) break; if (guess > randInt) { tries--; alert(`Too high! You have ${tries} chances left.`); } else if (guess < randInt) { tries--; alert(`Too low! You have ${tries} chances left.`); } else { alert(`Exactly! ${randInt} it is! You've won!`); // 询问是否再玩一次 return confirm("Do you want to play again?"); } } // 用完次数的情况 if (tries < 1) { alert(`Game over! The number was ${randInt}.`); return confirm("Do you want to play again?"); } return false; } // 外部循环,根据runGame的返回值决定是否继续 while (true) { let playAgain = runGame(); if (!playAgain) break; }
我还加了几个小优化:比如告诉用户剩余次数,处理用户取消prompt的情况,以及游戏结束后询问是否再玩,体验更好~
内容的提问来源于stack exchange,提问作者Saadat khurshid Kitab
相关产品推荐
相关产品推荐

