如何根据该对象的条件从java中的arraylist返回(和删除)对象

时间:2015-05-06 19:34:22

标签: java arraylist

上课时我需要做一个纸牌游戏(桥牌)。

我有一个Card类,它定义了一张卡的所有属性,还有一个生成52张牌的Deck类。还有一个Hand类,可以将牌从牌组随机分发到四手牌。

现在我需要制作一个方法,将玩家的手和目标套装作为输入,并返回该套装中排名最高的牌。我有:

.btn {
    white-space: no-wrap;
    overflow: hidden;
    text-overflow: ellipsis;
    padding-right: 10px;
}

.fixed-right {
    position: absolute;
    right: 5px;
}

我该怎么做才能退回所需的卡?此外,我还需要知道如何从ArrayList中删除特定的Card对象(基于有关卡的信息,例如它的等级和套装,但事先不知道它在ArrayList中的位置)。

第一次在这里发帖,感谢您的帮助!

4 个答案:

答案 0 :(得分:1)

要退回相关卡片,您需要循环浏览此套装中的所有卡片,并找到最大卡片以及此最大卡片的索引。一旦您检查了所有这些,请返回具有最高值的卡。我认为这就是你想要的(因为你没有提供所有的代码)。

int max = -1;
int maxCardIndex = -1;
int i;
for(i = 0; i < cardsOfSuit.size(); i++) {
    int cardVal = cardsOfSuit.get(i).getBridgeRank();
    if( cardVal > max) {
       maxCardIndex = i;
    }
}
return cardsOfSuit.get(maxCardIndex);

要取出卡片,只需遍历手中的所有卡片并检查卡片的详细信息,如果满足您的要求,请将其取下。 (你需要更新它,但它给出了一个例子)。

for(int i = 0; i < hand.size(); i++) {
    Card currentCard = hand.get(i);
    /* Check for what conditions you want to match in this if statement */
    if(currentCard.foo = "bar") {
       hand.remove(i);
    }
}

答案 1 :(得分:1)

private Card highestRankofSuit(ArrayList<Card> hand, char suit){
  ArrayList<Card> cardsOfSuit = null;
  int maxIndex = 0;
  int maxCardNum = 0;

for(int i = 0; i < hand.size(); i++)// for loop1{
            if (hand.get(i).getSuit() == suit) {
                if(hand.get(i).getNumberOnCard() > maxCardNum){
                      maxIndex = i;
                      maxCardNum = hand.get(i).getNumberOnCard();
                }
            }
        }
return hand.get(maxIndex);

}
  • 检查卡片是否正确
  • 检查其编号是否高于当前找到的最大编号
  • 如果是:将手中的卡索引保存在手ArrayList AND中     保存卡上的号码值,以便可以与下一张卡进行比较

答案 2 :(得分:0)

我要做的第一个改动是使用for-each循环,它遍历arraylist,所以你不必进行这么多的调用。我们真的需要看看getBridgeRank()方法的作用。你是否也想使用Math.max()方法或你自己的max方法?

private Card highestRankofSuit(ArrayList<Card> hand, char suit)
{
    ArrayList<Card> cardsOfSuit = null;
    for(Card c : habd)
    {
        if (c.getSuit() == suit)
            cardsOfSuit.add(c);
    }
    return cardsOfSuit(max(Card.getBridgeRank())); 
}

答案 3 :(得分:0)

如果你正在使用java 8,请查看java.util.Stream

private Card highestRankofSuit(ArrayList<Card> hand, char suit) {
        Optional<Card> max = hand.stream().
                filter(card -> card.getSuit() == suit).
                max((o1, o2) -> Integer.compare(o1.getBridgeRank(), o2.getBridgeRank()));

        return max.orElse(null); //may return null
}

用于删除符合条件的卡(不需要java 8)

Iterator<Card> iterator = hand.iterator();
        while (iterator.hasNext()) {
            Card card =  iterator.next();
            //Change the following condition depending on your needs
            if(card.getSuit()=='I'){
                iterator.remove();
            }
        }

如果您已经删除了要删除的卡,则可以使用ArrayList#remove(Object)

hand.remove(cardToRemove);