在 Java 中创建一组堆叠卡片时链表的替代方案?



假设我正在玩一个包含一系列堆叠卡片的纸牌游戏。我不知道在游戏开始之前我会有多少叠牌,但是一旦开始,堆叠的牌数量保持不变。我的第一个想法是使用为游戏实例提供的堆栈数量创建一个数组,将这些堆栈中的每张顶级卡片放入数组中,然后使用链表将每张卡片链接到它们的堆栈。

"我的卡"类具有以下字段:

public class Card {
private String suit;
private String value;
public Card cardInFront = null;
public Card cardInBack = null; 

例如,假设我得到一副标准牌(52张牌,4种花色,13个值),要分成5叠。我以循环方式将前五张牌分配到 5 个开口的数组中,如下所示:

int numOfPiles = 5;
Card[] cascadePiles = new Card[numOfPiles];
for (int i = 0; i < numOfPiles; i++) {
cascadePiles[i] = deck.get(i);
}

然后我继续以循环方式发牌,但将我发的每张牌与前面的牌和后面的牌连接起来。这一切都是使用以下代码完成的:

int x = 0;
while (x != numOfPiles) {
deck.remove(0);
x++;
}
int i = 0;
while (!deck.isEmpty()) {
if (i < numOfPiles) {
Card cardBehind = cascadePiles[i];
Card temp = cascadePiles[i];
Card nullSearcher = cascadePiles[i].cardInFront;
while (nullSearcher != null) {
cardBehind = temp;
temp = nullSearcher;
nullSearcher = temp.cardInFront;
}
addToPile(temp, deck.get(0), cardBehind);
temp.cardIsInPile = PileType.CASCADE;
deck.remove(0);
i++;
} else {
i = 0;
}
}

我在链表中完成这一切的原因是因为我不知道每个游戏需要多少堆栈。如果我使用一般列表,我必须知道在游戏开始之前要声明多少,而我没有。但是,通过像这样组织堆栈,我遇到了几个 NullPointerExceptions,并且我已经读到使用 null 只是一般的不良做法。有没有更聪明的方法可以做到这一点?

据我了解,ArrayList<LinkedList<Card>>数据类型之类的东西就可以完成这项工作。

ArrayList<LinkedList<Card>> listOfCardStack=new ArrayList<LinkedList<Card>>();
LinkedList<Card> stack0 = new LinkedList<Card>();
Card card0=new Card...
stack0.add(card0);
stack0.add(card1);
...
listOfCardStack.add(stack0);
...

相关内容

  • 没有找到相关文章

最新更新