2015-12-12 70 views
-1

我正在嘗試編寫一個Ruby程序來處理2張卡片給一個玩家,但是我得到錯誤消息,沒有將Fixnum隱式轉換爲字符串。我看過類似的問題,我不認爲它們適用於這個問題。我將不勝感激任何幫助。這裏是我的代碼:紅寶石 - 沒有將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

你能減少這個例子t o一個非常小的東西?應該可以創建一行或一行代碼,只顯示一行或兩行代碼,這就表明了這個問題。 –

回答

1

這很容易看到在命令行上,你選擇你的隨機卡和西裝。

當你去輸出協議,屏幕的效果,你可能會使用:

​​

我們的目標是在這裏,你想要的「5spades」或「黑桃5」更好。這裏的問題是suitFixnum對象,或者非常類似於int

雖然類String確實有+ operator它只能與其他字符串一起使用。

下面是一個例子來重現你的錯誤:

"ace" + 1 
TypeError: no implicit conversion of Fixnum into String 

爲了讓你的簡單條款後,您可以在Fixnum通過.to_s轉換爲字符串是這樣的:

> "ace" + 1.to_s 
=> "ace1" 

或者你可以使用像這樣的字符串插值:

> "ace#{1}" 
=> "ace1" 
+0

非常感謝您的幫助。我現在有另一個顯示值的問題。它說你的卡片是。還有什麼需要解決的嗎? – DBL

+0

將'card%13'行更改爲'card = card%13' – spickermann

1

我認爲你的問題可能是在這裏:

return "ace" + suit 

其中aceString和西裝是Integer suit = (card - 1)/13

您與做同樣的事情國王,女王,傑克

相關問題