我正在尝试编写一个Ruby程序来向一个播放器处理2张卡但是我收到错误消息没有将Fixnum隐式转换为字符串。我看过类似的问题,我认为它们不适用于这个问题。我很感激任何帮助。这是我的代码:
def get_card (card)
suit = (card - 1)/13
if (card == 0)
puts " of clubs"
elsif (card == 1)
puts " of diamonds"
elsif (card == 2)
puts " of hearts"
elsif (card == 3)
puts " of spades"
end
card % 13
if (card == 1)
return "ace" + suit
elsif (card == 11)
return "jack" + suit
elsif (card == 0)
return "king" + suit
elsif (card == 2)
return "2" + suit
elsif (card == 3)
return "3" + suit
elsif (card == 4)
return "4" + suit
elsif (card == 5)
return "5" + suit
elsif (card == 6)
return "6" + suit
elsif (card == 7)
return "7" + suit
elsif (card == 8)
return "8" + suit
elsif (card == 9)
return "9" + suit
elsif (card == 10)
return "10" + suit
elsif (card == 12)
return "queen" + suit
end
end
def deal_cards
total_cards = (1..52).to_a.shuffle
player_value = [total_cards.pop, total_cards.pop]
puts "Your cards are " + get_card(player_value[0]).to_s + " and " + get_card(player_value[1]).to_s
end
deal_cards
答案 0 :(得分:1)
我认为你的问题可能就在这里:
return "ace" + suit
其中ace
是String
,而西装是Integer
suit = (card - 1)/13
你为国王,女王,杰克做同样的事情
答案 1 :(得分:1)
这很容易在命令行上看到,你可以随机选择你的卡片。
当您将交易结果输出到屏幕时,您可以使用:
return "5" + suit
这里的目标是你想要“5spades”或更好,“5个黑桃”。这里的问题是suit
是Fixnum
对象,或与int
非常相似。
虽然班级String
确实有+
operator,但它只能与其他字符串一起使用。
以下是重现错误的示例:
"ace" + 1
TypeError: no implicit conversion of Fixnum into String
要以简单的术语表达您的观点,您可以通过Fixnum
将.to_s
转换为字符串,如下所示:
> "ace" + 1.to_s
=> "ace1"
或者您可以像这样使用字符串插值:
> "ace#{1}"
=> "ace1"