【问题标题】:Working with arrays of lists pattern in java在java中使用列表模式数组
【发布时间】:2010-03-26 04:27:13
【问题描述】:

我正在用 Java 编写一个纸牌游戏,我需要将卡片从一副牌分散到几列中,直到剩下固定数量的卡片。我就是这样做的。

公共类列扩展 ArrayList {} 列表牌组 = Cards.createNewDeck(); 列[]列=新列[10]; 诠释 c = 0; 而(甲板大小()> 50){ 如果(c == 10){ c = 0; } 如果(列[c] == null){ 列[c] = 新列(); } 列[c].add(Cards.dealTopCard(deck)); c += 1; }

这似乎有点笨拙。是否有更易读/更全面的方式来做同样的事情?

【问题讨论】:

    标签: java


    【解决方案1】:
    public class Column extends ArrayList {}
    List deck = Cards.createNewDeck();
    Column[] columns = new Column[10];
    int c = 0;
    
    for (int i = 0; deck.size() > 50; i = (i+1)%10)
    {
      if (columns[i] == null)
        columns[i] = new Column();
    
      columns[i].add(Cards.dealTopCard(deck));
    }
    

    模 (%) 运算符给出两个数字之间整数除法的余数,有效地为您提供一个在达到 10 时返回 0 的数字。

    顺便说一句,你应该决定:使用二维数组还是只使用ArrayLists,不要混用。

    那么既然 generics 确实存在,请使用它们来代替扩展类:这就是参数多态性的用途!比如:

    ArrayList<Int, ArrayList<Card>> columns = new ArrayList<ArrayList<Card>>();
    

    【讨论】:

    • 嗯,列表数组似乎是最好的方法。我有固定数量的列,但我不知道每列中有多少张卡片。列表列表有点冗长(columns[i] vs.columns.get(i))。你的例子很好,但我一直在寻找更深刻的东西。在 clojure 我会写类似 (def columns (partition 10 10 (list) (take 54 (create-deck)))
    • 不幸的是,这是 Java,而不是 Clojure :) 冗长是游戏的一部分。
    【解决方案2】:
    • 不要使用原始类型。
    • 不要将数组与列表混用。

    我的建议是定义List&lt;Pile&lt;Card&gt;&gt; columns,其中Pile&lt;Card&gt; 有一个List&lt;Card&gt;

    然后定义一个将Deck&lt;Card&gt; 转换为多个Pile&lt;Card&gt; 的经销商类型。这样可以更轻松地插入不同的甲板到桩策略以防万一。

    【讨论】:

      猜你喜欢
      • 2018-07-19
      • 1970-01-01
      • 2011-02-11
      • 1970-01-01
      • 2018-10-02
      • 2010-09-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多