如何使用迭代器从1创建4个ArrayList对象(对于每个)

时间:2015-01-13 21:47:15

标签: java arraylist iterator playing-cards

我基本上有一副52张牌,想要知道如何将卡牌交给4手牌。 例如,如果它是真正的纸牌游戏并且每个玩家都有一手牌,那么他们的牌将有52/4(13)张牌。

我创建了deck和hand类并生成了构造函数,因此它们被正确初始化,但是我如何使用迭代器依次将每张卡交给每只手

我查看了迭代器,无法找出合适的应用程序

以下是类牌和手牌的构造函数

private ArrayList<Card> deck;

    public Deck() {
        deck = new ArrayList<>(52);
        for (int i = 0; i < 52; i++)
            deck.add(new Card(value, suit);
    }

private ArrayList<Card> hand;

    public Hand() {
        hand = new ArrayList<>();
    }

3 个答案:

答案 0 :(得分:3)

我认为你不需要迭代。您可以使用subList

Collections.shuffle(deck);
List<Card> hand1 = deck.subList(0, 13);
List<Card> hand2 = deck.subList(13, 26);
List<Card> hand3 = deck.subList(26, 39);
List<Card> hand4 = deck.subList(39, 52);

这可以在一个返回带有循环的List<List<Card>>的方法中进行推广。

答案 1 :(得分:0)

int cards = 52;
int players = 4;
int hand = new int[players][cards];


int curPlayer = 0;
round = 0;
while(cards != 0){ 
  hand[curPlayer][round] = GetCardFromDeck();
  if(curPlayer == players){
    curPlayer = 0;
  }
  cards--;
  round++;
}

答案 2 :(得分:0)

如果你必须使用Iterator,那么一种方式就是这样:

    List<Card> deck = new ArrayList<Card>(); //populate your deck here
    Collections.shuffle(deck);
    Iterator<Card> iter = deck.iterator();

    List<Card> hand1 = new ArrayList<Card>();
    List<Card> hand2 = new ArrayList<Card>();
    List<Card> hand3 = new ArrayList<Card>();
    List<Card> hand4 = new ArrayList<Card>();

    Card c = null;
    while (true) {
        if (iter.hasNext()) {
            c = iter.next();
            hand1.add(c);
        } else {
            break;
        }
        if (iter.hasNext()) {
            c = iter.next();
            hand2.add(c);
        } else {
            break;
        }
        if (iter.hasNext()) {
            c = iter.next();
            hand3.add(c);
        } else {
            break;
        }
        if (iter.hasNext()) {
            c = iter.next();
            hand4.add(c);
        } else {
            break;
        }
    }