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

如何修复JavaScript中的石头剪刀布游戏逻辑错误?

问题根源与修复方案

你的代码逻辑本身没有错,出现错误结果的核心原因是重复调用了getComputerChoice():

  • 一开始你把第一次随机生成的电脑选择存在了computerSelection变量里,这个值才是传给playRound参与计算的
  • 但弹窗提示时你又调用了一次getComputerChoice(),这会生成一个新的随机值,导致你看到的电脑选择和实际参与对比的完全不是同一个,自然会出现结果和预期不符的情况

另外getComputerChoice()里的choice没有声明,属于全局变量,最好改成局部变量避免潜在问题。

修正后的完整代码

function getComputerChoice(){
    let choice; // 声明局部变量
    const randomNumber = Math.floor(Math.random()*3);
    if(randomNumber === 0){
        choice = "rock";
    } else if(randomNumber === 1){
        choice = "paper";
    } else if(randomNumber === 2){
        choice = "scissor";
    } 
    return choice;
}

let computerSelection = getComputerChoice();
let playerSelection = prompt("rock, paper, or scissor?").toLowerCase();

function playRound(playerSelection, computerSelection){
    let result = '';
    if(computerSelection === playerSelection){
        result = "It's a tie";
    } else if(computerSelection === 'paper' && playerSelection === 'rock'){
        result = "you lose";
    } else if(computerSelection === 'scissor' && playerSelection === 'rock'){
        result = "you win";
    } else if (computerSelection === 'rock' && playerSelection === 'paper'){
        result = "You win";
    } else if(computerSelection === 'scissor' && playerSelection === 'paper'){
        result = "you lose";
    } else if (computerSelection === 'paper' && playerSelection === 'scissor'){
        result = "You win";
    } else if(computerSelection === 'rock' && playerSelection === 'scissor'){
        result = "You lose";
    }
    return result;
};

alert("The computer chose: " + computerSelection); // 直接用已生成的变量,不再调用函数
alert("That means " + playRound(playerSelection, computerSelection));

额外优化建议(可选)

你可以把胜负判断逻辑简化,用对象映射的方式减少重复代码,比如:

function playRound(playerSelection, computerSelection){
    if(computerSelection === playerSelection) return "It's a tie";
    
    const winCases = {
        rock: 'scissor',
        paper: 'rock',
        scissor: 'paper'
    };
    
    return winCases[playerSelection] === computerSelection ? "You win" : "You lose";
}

这样代码更简洁,也不容易出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 11:25:30