我目前正在编写一个Java BlueJ项目来创建一个扑克游戏,我需要为持有牌的Hand设置一个类。我已经设置了一个甲板类,它基本上可以按顺序生成52张卡片。每张卡都有两个参数,一个等级和一个套装。我在手工课上做的是从卡片中取一张随机卡片(或者更确切地说是创建一张卡片),只是为了让我没有副本,我希望能够从甲板上取下那张卡片。看到制作的卡片是随机的,我不知道我怎么能把那张卡片从卡片上取下来。有没有办法把我刚刚生成的卡片拿到手中,然后使用remove()和/或indexOf从我的Deck中取出它? (请记住,deck和hand类都是ArrayLists )
答案 0 :(得分:3)
从牌组中移除随机牌的最简单方法是首先将牌组洗牌,
java.util.Collections.shuffle(...)
将为你完成这项工作。
然后通过deck.remove(0)
从牌组中取出第0张牌,这张牌将返回从牌组中移除的随机牌,然后将其放在手中。
即,
java.util.Collections.shuffle(deck); // do this just once when needed
// then later in code
hand.add(deck.remove(0));
答案 1 :(得分:1)
shuffle()是一种可行的方式,但它可以随机播放所有条目。更有效的方法是选择随机元素。
Random rand = new Random();
List<Card> deck = new ArrayList<>();
// add cards
// remove a random card.
Card card1 = deck.remove(rand.nextInt(deck.size()));
Card card2 = deck.remove(rand.nextInt(deck.size()));
答案 2 :(得分:0)
气垫船是对的。 Collections.shuffle()是要走的路。
但是,您应该创建一个单独的对象并将这些对象放在ArrayList中,而不是使用2个ArrayLists。然后使用Comparable实现使用Collections.sort()对它们进行排序。