【问题标题】:Java function to transfer data between lists?Java函数在列表之间传输数据?
【发布时间】:2012-01-28 21:29:11
【问题描述】:

我正在尝试制作扑克游戏,并希望在我的 ArrayList“牌组”和另一个列表“手牌”之间传输数据。我已经对我的列表进行了硬编码,以将所有 52 张卡片包含在标准套牌中,并且希望通过参考套牌中卡片的位置将第一张卡片从列表套牌中弹出到列表手牌中。由于洗牌,我无法参考卡片的名称来转移它,只需要卡片的位置转移到手上。有谁知道执行此操作的函数,对此进行硬编码甚至查看的方法。如果需要,我可以澄清任何事情。

【问题讨论】:

  • 这是什么?你说的是 first 卡片,还有一些卡片索引。
  • 嗯,我需要第一张牌,这样我就可以处理牌组的第一张牌,删除牌组中对牌的引用,然后引用牌组中新的第一张牌。

标签: java list transfer


【解决方案1】:

如果handdeck 都是ArrayList<Card> 类型,那么很简单:

hand.add(deck.remove(0));

请注意,ArrayList 不是一个特别好的类,因为它不是为有效删除列表末尾以外的条目而设计的。

【讨论】:

  • 我是 Java 新手,你会如何将手和甲板应用于一个 ArrayList?
  • @user1174711 你可能不会,它们会是单独的列表。
  • +1 简单明了。尽管我不同意效率方面的考虑。如果您正在编写像 Zynga 这样的扑克服务器,性能可能是一个考虑因素。对于 Java n00b,最好保持简单。 @user1174711:如果您发现此答案有用,请不要忘记接受它。这就是网站的运作方式。欢迎来到 SO。
  • 我正在为个人项目编写游戏,因此性能并不是真正的问题。也感谢您的欢迎。
【解决方案2】:

如果您将卡片组存储在ArrayDeque 中,您可能会发现会更容易。通过这样做,你可以调用Collections.shuffle 来洗牌,因为你正在处理pop 下一张牌,呃,Deque

【讨论】:

  • 我正在研究这个建议。它看起来很有希望。谢谢
【解决方案3】:

您可以使用remove(int index)。它返回索引处的对象并将其从列表中删除。

【讨论】:

    【解决方案4】:

    您应该使用Stack 作为卡片组,因为这就是卡片组的操作方式,并且它确实“弹出”了集合中的第一个对象。 (您也可以使用generic Queue interface 来获得更现代、类型安全的方法,并且您的实现仍然可以是一个列表集合。)

    这里有一些关于shuffling a Stack 的信息。洗牌后的堆栈就像一副纸牌一样。

    【讨论】:

    • 为什么不将Stack 传递给Collections.shuffleStack 基于 Vector - 查看 ArrayDeque 以获取非同步替代方案。 (自 1.6 起新增)。
    • 我目前在我的 ArrayList 上使用 Collections.shuffle。如果为此使用堆栈有什么好处?
    • 好处是堆栈已经像套牌一样工作。它开箱即用地为您模拟现实世界,因此您必须编写更少的逻辑来管理 ArrayList 以使其表现得像一个甲板。 @Paul:这就是改组 Stack 链接所暗示的。
    • 有趣的是,Deque 也可以像套牌一样工作。或者堆栈,正如 API 所说,“当用作堆栈时,此类可能比 Stack 更快。”
    • 投反对票是怎么回事?可以公平地说,对于 52 个对象的集合,任何类似甲板的集合都可以吗?
    猜你喜欢
    • 1970-01-01
    • 2013-05-14
    • 2019-08-14
    • 2019-01-26
    • 1970-01-01
    • 1970-01-01
    • 2018-04-27
    • 1970-01-01
    • 2023-03-24
    相关资源
    最近更新 更多