用纸牌堆Java填充堆栈

时间:2019-12-19 18:05:50

标签: java arraylist stack push peek

我目前正在设计一个Java应用程序,它将在经过洗牌的纸牌上执行许多不同的操作。在应用程序中,我具有:

  • Stack.java:这是程序的接口,包括诸如pop,push和peek之类的方法
  • Deck.java:我的甲板类,实现了堆栈
  • Card.java:卡对象类
  • Shuffle.java:包含用于在卡上执行浅滩随机播放的代码
  • CardForce.java:主类

我的程序中的卡可以描述为具有face(A,2,3,4..J,K,Q)suit(Hearts,Diamonds,Clubs,Spades),并且其值对应于面部,即
A = 1, 2 = 2, 3 = 3,依此类推。

public Card(String cardFace, String cardSuit, int cardValue){
    face = cardFace;
    suit = cardSuit;
    value = cardValue;
}//ends Card

目前,我的卡片存储在我的套牌类中的ArrayList中。

public class Deck implements Stack{


private List<Card> cards;

private int size;//number of cards in deck


public Deck(String[] faces, String[] suits, int[] values){
   cards = new ArrayList<Card>();
   for(String suit: suits) 
       for(int value = 0; value < values.length && value < faces.length; value++){
           Card a = new Card(faces[value], suit, values[value]);
           cards.add(a);
       }
   size = cards.size();
   //////////////////////////////////////shuffle();
   shuffle();
}//ends deck

我希望将卡片组从数组列表更改为堆栈,因此我可以执行诸如pop,push和peek之类的操作。也欢迎提供有关将列表转换为堆栈后如何实现这些操作的帮助。

2 个答案:

答案 0 :(得分:1)

您只需将堆栈函数添加到Deck类中,然后将ArrayList用作堆栈。像这样:

public void push(Card c) {
  cards.add(c);
}

public Card pop() {
  Card c = cards.get(cards.size() - 1);
  cards.remove(cards.size() - 1);
  return c;
}

public Card peek() {
  return cards.get(cards.size() - 1);
}

您将需要在poppeek上添加支票,以确保您的牌组中确实有纸牌,但这几乎覆盖了它。

答案 1 :(得分:0)

只需在JDK中使用Stack类,它将支持这些功能。

您可以用数组列表填充Stack

      List<Card> list = your array list
      Stack<Card> stack = new Stack<>();
      stack.addAll(list);