Ruby 对象,该对象包含变为零的数组

Ruby 对象,该对象包含变为零的数组,ruby,class,Ruby,Class,我有一个类Deck,它表示一个由81张卡组成的数组,但是当我尝试在数组中的任何卡上使用getter函数时,它会给出错误未定义的方法getColor for nil:NilClass(nomethoderor),我假设数组中的所有内容都等于nil 我正在试图弄清楚如何设置我的Deck类,这样我就可以通过使用getCard函数返回任何卡,然后使用card getter方法获取单个卡的所有值 class Card def initialize id, symbol, color, shad

我有一个类
Deck
,它表示一个由81张卡组成的数组,但是当我尝试在数组中的任何卡上使用getter函数时,它会给出错误
未定义的方法getColor for nil:NilClass(nomethoderor)
,我假设数组中的所有内容都等于
nil

我正在试图弄清楚如何设置我的
Deck
类,这样我就可以通过使用
getCard
函数返回任何卡,然后使用card getter方法获取单个卡的所有值

class Card  
    def initialize id, symbol, color, shading, number
        @cardId = id #0-80 unique for each indivdual card in the deck
        @cardSymbol = symbol # 0 = diamond 1 = squigly 2 = oval
        @cardColor = color # 0 = green 1 = blue 2 = pink
        @cardShading = shading # 0 = none 1 = lines 2 = solid
        @cardNumber = number #number of the symbols on the card
    end

    def getId
        @cardId
    end

    def getSymbol
        @cardSymbol
    end

    def getColor
        @cardColor
    end

    def getShading
        @cardShading
    end

    def getNumber
        @cardNumber
    end

end

class Deck

    def initialize
        @deck = Array.new(81)
        @cardDealt = Array.new(81)
    end

    def AddCardsToDeck  
        cardId = 0
        symbol = 0
        color = 0
        shading = 0
        number = 0
        while cardId < 80
            if symbol > 2
                symbol = 0
                color = color + 1
            elsif color > 2
                color = 0
                shading = shading + 1
            elsif shading > 2
                shading = 0
                number = number + 1
            else
                symbol = symbol + 1
            end 
            card = Card.new(cardId, symbol, color, shading, number)
            cardId = cardId + 1
            @deck[cardId] = @card
        end 
    end

    def getCard cardId
        @deck[cardId]
    end
end

setDeck = Deck.new
setDeck.AddCardsToDeck
card0 = setDeck.getCard(0)
puts "Color is #{card0.getColor}"
类卡
def初始化id、符号、颜色、着色、编号
@cardId=id#组中每个独立卡的0-80唯一性
@cardSymbol=符号#0=菱形1=扭曲的2=椭圆形
@cardColor=颜色#0=绿色1=蓝色2=粉色
@cardShading=shading#0=none 1=lines 2=solid
@cardNumber=编号#卡上符号的编号
结束
def getId
@卡迪德
结束
def getSymbol
@卡片符号
结束
def getColor
@卡片颜色
结束
def getShading
@明暗处理
结束
def getNumber
@卡号
结束
结束
甲板
def初始化
@甲板=阵列。新(81)
@carddrealed=Array.new(81)
结束
def AddCardsToDeck
卡迪德=0
符号=0
颜色=0
着色=0
数字=0
而心脏病<80
如果符号>2
符号=0
颜色=颜色+1
elsif颜色>2
颜色=0
着色=着色+1
elsif着色>2
着色=0
数字=数字+1
其他的
符号=符号+1
结束
卡片=卡片。新(卡片、符号、颜色、阴影、编号)
卡迪德=卡迪德+1
@卡片组[卡片]=@卡片
结束
结束
def getCard梳棉机
@甲板[卡迪德]
结束
结束
setDeck=Deck.new
setDeck.AddCardsToDeck
card0=setDeck.getCard(0)
放置“颜色为#{card0.getColor}”
这些行

card = Card.new(cardId, symbol, color, shading, number)
cardId = cardId + 1
@deck[cardId] = @card
这就是问题所在。注意在第一行中如何设置局部变量
card
,而在第三行中使用未初始化的实例变量
@card
。这会将所有条目设置为
nil

另一个问题是在将
carid
用作索引之前增加它。这会将卡0设置为插槽1等。这是一个典型的“一次性”错误。

线路

card = Card.new(cardId, symbol, color, shading, number)
cardId = cardId + 1
@deck[cardId] = @card
这就是问题所在。注意在第一行中如何设置局部变量
card
,而在第三行中使用未初始化的实例变量
@card
。这会将所有条目设置为
nil


另一个问题是在将
carid
用作索引之前增加它。这会将卡0设置为插槽1等。这是一个典型的“一次性”错误。

@deck[cardd]=card
plus
cardd+=1
肯定会作为与问题无关的注释出现在卡组分配的末尾,而您的代码仍然可以正常运行,您可能对阅读样式指南感兴趣,以了解Ruby如何更喜欢样式化代码。似乎很受欢迎,特别是描述我们喜欢如何命名事物。还有一系列函数可以用于一些琐碎的getter,比如
Card
@deck[cardd]=Card
加上
cardd+=1
应该作为与问题无关的注释出现在卡片组分配的末尾,而代码仍然可以正常运行,您可能对阅读样式指南感兴趣,以了解Ruby如何更喜欢样式化代码。似乎很受欢迎,特别是描述我们喜欢如何命名事物。还有一系列函数可以用于一些琐碎的getter,比如
卡片
类。我一直认为这是我的类结构中的一个错误,但忽略了这个琐碎的问题。谢谢呃,我一直认为这是我的类结构的一个错误,我忽略了这个小问题。谢谢