2014-01-26 66 views
0

我對Ruby相當陌生,並試圖研究這個問題。這是目前的代碼。我似乎沒有調用用戶對象(user.deal_one(mydeck.deal_card))這個問題,但是當我在經銷商處調用它時,我得到了同樣的錯誤。經銷商對象具有相同的實例變量,我不確定它爲什麼調用方法'< <'。問題理解Ruby錯誤:未定義的方法`<<'爲零:NilClass(NoMethodError)

以下是完整的錯誤:blackjackOOP.rb:32:在deal_one': undefined method < < '的零:NilClass(NoMethodError) 從blackjackOOP.rb:106:在`'

class Deck 
    def initialize 
    @deck = [] 
    @suit = ["Clubs", "Diamonds", "Hearts", "Spades"] 
    @value = [2, 3, 4, 5, 6, 7, 8, 9, 10, "Jack", "Queen", "King", "Ace"] 
    @count = 0 

    @value.each do |x| 
     @suit.each do |y| 
     @deck[@count] = [x, y] 
     @count += 1 
     end 
    end 
    @deck.shuffle! 
    end 

    def deal_card 
    @card = [] 
    @card << @deck.pop 
    @card 
    end 

    def show_deck_size 
    puts @deck.size 
    end 
end 

module Hand 
    def deal_one(card) 
    @hand << card 
    end 

    def total 
    @total = 0 
    @hand.each do |card| 
     card.each do |val, suit| 
     if val == "Jack" || val == "Queen" || val == "King" 
      @total += 10 
     elsif val != "Ace" 
      @total += val 
     elsif val == "Ace" 
      if @total > 10 
      @total += 1 
      else 
      @total += 11 
      end 
     end 
     end 
    end 
    end 
end 

class Player 
    include Hand 

    def initialize(name) 
    @name = name 
    @hand = [] 
    end 

    def hit_stay 
    puts "#{@name} has #{show_hand} for a total of #{@total}" 
    end 

    def show_hand 
    @hand.each do |card| 
     card.each do |val, suit| 
     print "#{val} of #{suit} " 
     end 
    end 
    end 
end 

class Dealer 
    include Hand 

    def initalize 
    @name = "Dealer" 
    @hand = [] 
    end 
end 

def say(n) 
    puts "=> #{n}" 
end 



say("Hello would you like to play some blackjack? Great!") 
say("What is your name?") 
name = gets.chomp 

mydeck = Deck.new 
user = Player.new(name) 
dealer = Dealer.new 

say("Welcome #{name}! Let's play!") 


#deal hands to dealer and player 
user.deal_one(mydeck.deal_card) 
user.deal_one(mydeck.deal_card) 
dealer.deal_one(mydeck.deal_card) 
+2

[請接受答案](http://stackoverflow.com/questions/21369303/issue-understanding-ruby-error-undefined-method-for-nilnilclass-nomethod/21369424#21369424)如果它幫助你。 –

回答

3

有一個錯字在您的Dealer類中。

你寫了def initalize它應該是def initialize

+0

你有一個非常好的眼睛.. :)偉大的+1 –

+0

@ArupRakshit找到這樣的東西的方法是把它放在一個撬會議,看看對象的外觀。在調用Player.new方法時,生成的對象與Dealer.new會話產生的經銷商對象看起來非常不同。什麼脫穎而出是dealer.hand沒有初始化。這隻留下幾個地方的實際錯誤可能。 – FlyingFoX

+0

我從來沒有用pry .. –

相關問題