有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何正确地将引用从一个Arraylist传输到另一个Arraylist

我正在做一个扑克牌游戏,似乎有一个与ArrayList的问题 我有一张arraylist,上面有游戏中所有可用的牌, 以及另一个播放列表,其中包含用户选择使用的卡

第二个arraylist开始为空,当用户开始从第一个arraylist中拾取卡片时,该卡片将被传输到第二个播放列表中

问题是,如果用户选择了两张相同的卡,那么一张卡的情况也会发生在另一张卡上。所以,假设用户选择了两张名为“超人”的卡片。当一个超人的健康下降时,另一个也会下降

我的代码如下所示,用于将卡添加到choosen卡:

//choosenCards is the arraylist of cards that the user chooses
//cards is the arraylist of available cards
choosenCards.add(cards.get(index));

共 (2) 个答案

  1. # 1 楼答案

    “添加”这样的卡片实际上只是添加了一个指向原始对象的引用。你想要的可能是一个“深度副本”(因此你可以从原始版本中获得两个独立的版本)

    使用choosenCards.add((Class of the card object) cards.get(index).clone());

    (Class of the card object)的原因是Object.clone()返回一个Object,然后需要将其转换为正确的类型

  2. # 2 楼答案

    如果需要从cards转移到choosenCards,则需要使用remove(index)

    choosenCards.add(cards.remove(index));
    

    请注意,从卡中移除卡后,最大可用索引比之前少一个

    您可以编写代码,将卡添加到choosenCard,但不会从cards中删除