Java:在查找两个参数时,如何在arraylist中执行indexOf

时间:2013-12-24 20:26:36

标签: java arraylist

我目前正在编写一个Java BlueJ项目来创建一个扑克游戏,我需要为持有牌的Hand设置一个类。我已经设置了一个甲板类,它基本上可以按顺序生成52张卡片。每张卡都有两个参数,一个等级和一个套装。我在手工课上做的是从卡片中取一张随机卡片(或者更确切地说是创建一张卡片),只是为了让我没有副本,我希望能够从甲板上取下那张卡片。看到制作的卡片是随机的,我不知道我怎么能把那张卡片从卡片上取下来。有没有办法把我刚刚生成的卡片拿到手中,然后使用remove()和/或indexOf从我的Deck中取出它? (请记住,deck和hand类都是ArrayLists

3 个答案:

答案 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()对它们进行排序。