Arrays 循环中未删除的最后一个元素
我想从Arrays 循环中未删除的最后一个元素,arrays,ruby,methods,Arrays,Ruby,Methods,我想从@hand数组中移除与给定输入具有相同等级的卡。我在整个阵列中循环,为什么它不能去掉最后一张卡?非常感谢您的帮助 输出: 2 of Clubs 2 of Spades 2 of Hearts 2 of Diamonds 3 of Clubs 3 of Spades ------------ 2 of Clubs 2 of Spades 2 of Hearts 2 of Diamonds 3 of Spades 代码: 手工课: class Hand def initialize
@hand
数组中移除与给定输入具有相同等级的卡。我在整个阵列中循环,为什么它不能去掉最后一张卡?非常感谢您的帮助
输出:
2 of Clubs
2 of Spades
2 of Hearts
2 of Diamonds
3 of Clubs
3 of Spades
------------
2 of Clubs
2 of Spades
2 of Hearts
2 of Diamonds
3 of Spades
代码:
手工课:
class Hand
def initialize(*cards)
@hand = cards
end
def remove_cards(value)
@hand.each_with_index do |hand_card, i|
if hand_card.rank == value
@hand.delete_at(i)
end
end
end
def to_s
output = ""
@hand.each do |card|
output += card.to_s + "\n"
end
return output
end
end
卡片类别:
class Card
attr_reader :rank, :suit
def initialize(rank, suit)
@rank = rank
@suit = suit
end
def to_s
"#{@rank} of #{@suit}"
end
end
你的问题就在这一行
@hands.each_with_index do |hand_card, i|
您有一个实例变量@hand
,而不是@hands
删除卡(值)
有一个问题:在迭代过程中不应删除
。正确的方法是从手牌中取出牌:
def remove_cards(value)
@hands.reject! { |hand_card| hand_card.rank == value }
end
我在发布我的问题后就注意到了我的打字错误(我的文本编辑器没有颜色,这样可以更容易地查看未键入的变量)。我编辑了这个问题,但仍然有一个问题。顺便说一句,你应该负担得起使用普通编辑器的费用,而不是浪费我们的时间在你的打字错误上。@mudasobwa不幸的是,我目前正在使用锁定的计算机,没有安装任何IDE的权限。Discover或google for“online IDE”-到处都是。再次感谢,我对编码行业还比较陌生,所以为我的无知感到抱歉。在迭代过程中使用delete是不好的做法还是完全错误的做法?为什么会这样?我的代码正在按预期运行,谢谢!这是完全错误的。当数组在元素删除后被“压缩”时,内部迭代器指针会变得混乱。未显示类
Deck
,并且所显示的代码未使用类Card
。
def remove_cards(value)
@hands.reject! { |hand_card| hand_card.rank == value }
end