FreeCodeCamp石头剪刀布游戏:hasPlayerWonTheRound函数返回布尔值报错
问题分析与解决
问题背景
正在解决FreeCodeCamp的石头剪刀布游戏问题,当前需实现hasPlayerWonTheRound函数,判断玩家是否赢下单轮对局:
- 函数接收
player和computer两个参数 - 玩家获胜的判定条件:
- 玩家选择"Rock"且电脑选择"Scissors"
- 玩家选择"Scissors"且电脑选择"Paper"
- 玩家选择"Paper"且电脑选择"Rock"
- 玩家赢则返回
true,输或平局则返回false
提交的代码如下:
function hasPlayerWonTheRound(player, computer) { if (player === "Rock" && computer === "Scissors") { return true; } else if (player =="Scissors" && computer =="Paper") { return true; } else if (player =="Paper" && computer =="Rock") { return true; } else if (player=="Rock" && computer=="Rock") { return false; } else if (player=="Paper" && computer=="Paper") { return false; } else (player=="Scissors" && computer=="Scissors") { return false; }
报错提示(翻译后):
你的
hasPlayerWonTheRound函数应该返回一个布尔值。
错误原因
最后一行的else语法错误:else关键字后不能直接跟条件判断语句,这种写法会导致代码语法异常,函数在某些分支下无法正常返回布尔值,触发报错。
修复方案
方案一:修正语法并简化分支
去掉最后一行else后的条件判断,用else统一处理所有非获胜情况:
function hasPlayerWonTheRound(player, computer) { if (player === "Rock" && computer === "Scissors") { return true; } else if (player == "Scissors" && computer == "Paper") { return true; } else if (player == "Paper" && computer == "Rock") { return true; } else { return false; } }
方案二:极简逻辑写法
直接通过逻辑或判断所有获胜条件,其余情况自动返回false:
function hasPlayerWonTheRound(player, computer) { return ( (player === "Rock" && computer === "Scissors") || (player === "Scissors" && computer === "Paper") || (player === "Paper" && computer === "Rock") ); }
内容的提问来源于stack exchange,提问作者Cody Rutscher
相关产品推荐
相关产品推荐

