Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 循环中未删除的最后一个元素_Arrays_Ruby_Methods - Fatal编程技术网

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