上课时我需要做一个纸牌游戏(桥牌)。
我有一个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中的位置)。
第一次在这里发帖,感谢您的帮助!
答案 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);
}
答案 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);