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



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

我已经创建了套牌和手类并生成了构造函数,以便它们正确初始化,但是我将如何使用迭代器将每张牌依次发给每手牌

我看过迭代器,但找不到合适的应用程序

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

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<>();
    }

我认为你不需要迭代。您可以使用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>>的方法中进行概括。

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++;
}

如果您必须使用迭代器执行此操作,一种方法如下所示:

    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;
        }
    }

相关内容

  • 没有找到相关文章

最新更新