我基本上有一副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<>();
}
答案 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;
}
}