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

JavaScript石头剪刀布游戏始终返回单一结果问题咨询

问题分析与修复方案

核心问题点

  • 函数调用未传参:调用Result()时没有传入playerSelection和computerSelection,函数内部的形参是局部变量,和全局的同名变量无关联,导致函数内这两个值都是undefined,直接触发最后一个else分支。
  • 条件判断逻辑混乱:多个独立的if会依次执行,哪怕前面已经判定出结果,后面的if/else仍会覆盖之前的gameResult。比如就算已经判定是平局,最后那个else还是会执行,把结果改成无效提示。
  • 缺少输入有效性校验:没有先判断用户输入的内容是否在rock/paper/scissors范围内,直接进入输赢判断。
  • 变量未声明:gameResult没在函数内声明,会变成全局变量,不符合JS编码规范。

修复后的代码

const hands = ["rock", "paper", "scissors"];
// 生成电脑选择
const computerSelection = hands[Math.floor(Math.random() * hands.length)];
console.log("电脑选择:", computerSelection);

// 获取并处理用户输入
let playerSelection = prompt("Do you want to choose rock, paper, or scissors?").toLowerCase();
console.log("你的选择:", playerSelection);

function getResult(player, computer) {
    // 先校验输入有效性
    if (!hands.includes(player)) {
        return "Please enter a valid prompt";
    }
    // 平局判断
    if (player === computer) {
        return "Tie";
    }
    // 电脑赢的情况
    if (
        (computer === "paper" && player === "rock") ||
        (computer === "scissors" && player === "paper") ||
        (computer === "rock" && player === "scissors")
    ) {
        return "Computer wins";
    }
    // 剩下的情况就是玩家赢
    return "You win";
}

// 调用函数时传入参数
const gameResult = getResult(playerSelection, computerSelection);
console.log(gameResult);

关键改动说明

  1. 调用函数时传入playerSelection和computerSelection参数,让函数能拿到正确的选择值。
  2. 调整条件判断顺序:先校验输入合法性,再判断平局,接着判断电脑赢,最后剩下的情况直接判定玩家赢,彻底避免逻辑覆盖问题。
  3. 用hands.includes(player)校验输入是否合法,提前拦截无效输入。
  4. 函数改用return返回结果,避免全局变量污染,代码逻辑更清晰。
  5. 所有变量用const/let声明,符合JS变量声明规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 04:01:05