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

Ruby编写石头剪刀布游戏无报错但运行结果不符合预期如何解决

问题定位

你的代码存在3个核心问题:

  • 数组索引取值错误:Ruby的数组下标从0开始计数,你定义的cchoice数组下标0对应"Rock"、1对应"Paper"、2对应"Scissors",但你用rand(1..3)生成的随机数是1、2、3,当随机数取3时cchoice[comp]会返回空值,同时1、2对应的选项也和你后续的胜负判断逻辑不匹配。
  • 完全缺失平局场景的处理:当用户选择和电脑选择一致时,你的代码没有对应判断分支,会直接走默认的won=false逻辑判定为用户输,不符合游戏规则。
  • 胜负判断逻辑和数组取值不对应:因为前面的随机数是从1开始取的,和你写的胜负判断条件里的comp数值对应关系完全错位,导致输赢结果完全不符合预期。
修正后可正常运行的代码
puts "Rock, Paper or Scissors"
choice = gets.chomp
cchoice = ["Rock", "Paper","Scissors"]
# 生成0-2的随机数对应数组下标
comp = rand(0..2)
won = false
tie = false

puts "Computer chose #{cchoice[comp]}"
if (choice == "Rock")
    if (comp == 1) # 电脑出Paper,用户输
        won = false
    elsif (comp == 2) # 电脑出Scissors,用户赢
        won = true
    else # comp==0,电脑也出Rock,平局
        tie = true
    end
elsif (choice == "Paper")
    if (comp == 2) # 电脑出Scissors,用户输
        won = false
    elsif (comp == 0) # 电脑出Rock,用户赢
        won = true
    else # 平局
        tie = true
    end
elsif (choice == "Scissors")
    if (comp == 0) # 电脑出Rock,用户输
        won = false
    elsif (comp == 1) # 电脑出Paper,用户赢
        won = true
    else # 平局
        tie = true
    end
else
    puts "I dont know what that means so-"
    exit
end

if tie
    puts "It's a tie!"
elsif (won)
    puts "YOU WON!!!"
else
    puts "You lost.."
end

内容的提问来源于stack exchange,提问作者Bradley Joe Joseph

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 11:09:02