JavaScript猜拳游戏输入非法判断的if语句逻辑错误求助
解决石头剪刀布游戏的输入验证问题
嗨Morgan!很高兴看到你在Stack Overflow的第一篇帖子😊,咱们来快速搞定这个问题。
你的核心问题出在逻辑运算符的误用上——你当前用了||(逻辑或),但这里需要的是&&(逻辑与)。
为什么原来的代码会一直触发提示?
咱们拆解下你写的条件:
if(userChoice !== "PAPER" || userChoice !== "ROCK" || userChoice !== "SCISSORS")
不管用户输入什么,这个条件永远为true:
- 如果输入
"PAPER",userChoice !== "ROCK"是真,整个条件成立; - 如果输入
"ROCK",userChoice !== "PAPER"是真,条件也成立; - 哪怕是合法输入,总有一个“不等于”的条件会满足,所以alert会被无差别触发。
修正后的代码
我们需要判断的是:用户输入同时不等于这三个合法选项,所以要用&&连接条件:
function userPlay() { let userChoice = prompt("Make your move") // 处理用户点击取消的情况,避免后续toUpperCase()报错 if (userChoice === null) { alert("你取消了输入哦") return userPlay() } userChoice = userChoice.toUpperCase() console.log(userChoice) // 用&&替代||,判断输入同时不是三个合法选项 if(userChoice !== "PAPER" && userChoice !== "ROCK" && userChoice !== "SCISSORS"){ alert("Not an option") return userPlay() // 加return避免函数继续执行返回undefined } return userChoice }
额外小优化
我还加了对prompt返回null的处理(用户点击取消按钮时),避免userChoice.toUpperCase()抛出错误。另外在递归调用userPlay()时加了return,确保函数不会在触发提示后继续执行到后面的return,避免返回意外的undefined。
这样修改后,只有当用户输入非合法选项时才会触发提示,合法输入就能正常返回啦!
内容的提问来源于stack exchange,提问作者MorganFlam
相关产品推荐
相关产品推荐

