2017-03-03 84 views
0

我的代码存在问题,而且似乎无法弄清楚我需要更改什么。这里是我的三个文件,底部是我得到的错误。我有18次完全相同的代码,其中一半给了我这个错误。单元测试错误undefined方法`等级'为1:Fixnum

初始化等级,花色和符号

def initialize(the_rank, the_suit) 
    @rank = the_rank 
    @suit = the_suit 
    @symbols = [nil, nil, '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A'] 
end 

新文件Pokerhand.rb: 要求 “./Constants” 要求 “./Card” 要求 “./Deck” 要求”。/CardSpaceship”

class PokerHand < Deck 
    include Constants 
    attr_reader :hand_type 

    def initialize(the_cards) 
    @cards = [ ] 
    @hand_type = UNCLASSIFIED 
    for card in the_cards 
    @cards << card 
    end 
    end 

    # Straight 
    elsif @cards[0].rank == @cards[1]+1.rank && 
    @cards[1].rank == @cards[2]+1.rank && 
    @cards[2].rank == @cards[3]+1.rank && 
    @cards[3].rank == @cards[4]+1.rank 

    @hand_type = STRAIGHT 

    end 
end 

新文件test2.rb:

class PokerHand < Deck 
    include Constants 
    attr_reader :hand_type 

     def initialize(the_cards) 
    @cards = [ ] 
    @hand_type = UNCLASSIFIED 
    for card in the_cards 
    @cards << card 
    end 
    end 


# Determine hand type of PokerHand object. 
def classify 

    @cards.sort! 



    # Straight 
def test_7 
    arr7 = [Card.new(2, "C"), Card.new(3, "S"), 
     Card.new(4, "H"), Card.new(5, "D"), 
     Card.new(6, "S")] 
    ph7 = PokerHand.new(arr7) 
    ph7.classify 
    assert_equal STRAIGHT , ph7.hand_type 
    end 

收到错误:

TestClass#test_7: 
NoMethodError: undefined method `rank' for 1:Fixnum 
    PokerHand.rb:79:in `classify' 
    test2.rb:76:in `test_7' 
+0

在许多系统中,卡被表示为'2D','3C',...'TH','AS',其中'T'代表10以使它们始终保持两个字母串。 – tadman

+0

你也可以像这样测试一个同花顺:'@ cards.map(&:suit).uniq.length == 1'这意味着它们都有相同的花色。对于顺序卡,你应该在'rank'上排序。这里的“同花顺”代码的唯一方法是如果你有五张完全相同的卡片。 – tadman

+0

我修复了我的代码,其中1/3是正确的,但是其他错误发生的错误 – Julian

回答

1

一开始,你的PokerHand#initialize方法是极其混乱。除了[ ](一个空数组)之外,您从不将任何值分配给@cards。因此,当您拨打classify方法时,@cards仍然为[ ],所以@cards[0],@cards[1]或实际上@cards[x]对于任何值x始终为nilPokerHand#initialize应该看起来更像是这样的:

def initialize(cards) 
    @cards = cards 
    @hand_type = UNCLASSIFIED 
end 

其次,你对什么构成同花顺是不正确的逻辑。目前,只有在手牌中的每张牌完全相同的情况下,例如,这三张牌的五个副本,才能计算同花顺。

+0

它会被@cards [3] .rank == @cards [4] + 1.rank或@cards [3] .rank == @cards [4] .rank +1 – Julian

+0

既不是,从最小到最大,所以它是'@cards [3] .rank == @cards [4] .rank - 1' – philomory

+0

我修复了我的代码,其中1/3是正常的,但其他人给出相同的错误 – Julian