You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript石头剪刀布游戏checkWinner函数结果异常求助

问题分析与修复

核心问题

你遇到的错误并非checkWinner函数逻辑错误,而是两次调用getComputerChoice()导致的混淆:

  • 代码中先执行了console.log(getComputerChoice()),生成一个随机选择并打印;
  • 随后又执行let computerSelection= getComputerChoice();,再次生成一个全新的随机选择,这才是传入checkWinner的真实值。
    你误以为控制台打印的就是传入函数的电脑选择,所以会出现“明明打印的是Paper却返回Player获胜”的错觉——实际传入函数的是另一个随机值(比如Rock),此时玩家选Paper确实会赢,只是你看到的打印值和实际传入值不一致。

另外,函数中混合使用了===和==,虽然当前场景下不影响结果,但建议统一使用严格相等===保持代码规范。

修复后的代码

let choices = ["Rock", "Paper", "Scissors"];

function getComputerChoice() {
  let result = choices[Math.floor(Math.random() * 3)];
  return result;
}

function checkWinner(computerSelection, playerSelection) {
  // 统一使用严格相等===
  if ((computerSelection === "Rock" && playerSelection === "Rock") ||
      (computerSelection === "Paper" && playerSelection === "Paper") ||
      (computerSelection === "Scissors" && playerSelection === "Scissors")) {
    return "Tie"; 
  } else if ((computerSelection === "Rock" && playerSelection === "Scissors") ||
             (computerSelection === "Paper" && playerSelection === "Rock") ||
             (computerSelection === "Scissors" && playerSelection === "Paper")) {
    return "Computer";
  } else if ((computerSelection === "Scissors" && playerSelection === "Rock") ||
             (computerSelection === "Rock" && playerSelection === "Paper") ||
             (computerSelection === "Paper" && playerSelection === "Scissors")) {
    return "Player";
  } else {
    return "Try again";
  }
}  

// 只调用一次getComputerChoice,并存入变量,确保打印和传入函数的是同一个值
let computerSelection = getComputerChoice();
let playerSelection = "Paper";

console.log(`电脑选择:${computerSelection}`);
console.log(checkWinner(computerSelection, playerSelection));

验证说明

修复后,控制台会先打印真实传入函数的电脑选择,再输出胜负结果,你可以清晰看到每一次的对应关系,结果会100%符合石头剪刀布的规则:

  • 当电脑和玩家选择相同时返回Tie
  • 电脑赢的场景(Rock赢Scissors、Paper赢Rock、Scissors赢Paper)返回Computer
  • 玩家赢的场景(Rock赢Scissors、Paper赢Rock、Scissors赢Paper的反向)返回Player

内容的提问来源于stack exchange,提问作者CrimKingX49

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 05:33:35