有一个牌组(Deck),从中随机发出五张牌。接下来,您需要检查是否存在扑克牌。一切正常,但问题出在发球台上。确定发球台本身并不难,问题是我必须知道哪些牌构成发球台,从我的实施来看,不可能考虑第一张牌,因此该方法只给出满堂彩和四个种类。
public boolean isThreeOfKind() {
ArrayList<Card> cardsToZero = new ArrayList<>();//сюда кладутся карты тройника
HashSet<String> rankKeys = new HashSet<>();
for (Card c : cards) {
/*1.берем ранг карты
*2.если есть такой же ранг откладываем в лист cardsToZero
*3. если нет то в rankKeys
4.повторяем. если cardstozero будет = 3 то это точно тройник*/
if (rankKeys.contains(c.getStringRank())) {
cardsToZero.add(c);
} else {
rankKeys.add(c.getStringRank());
}
if (cardsToZero.size()==3){
//int rezultZero = cardsToZero.get(0).getRank();
//rezultZero = getTotal() - rezultZero*3;
//System.out.println("from method rezult :" + rezultZero);
return true;
}
}
return false;
}
这是卡片类
public class Card {
private Suit suit;
private Rank rank;
//private StraightRank straightRank;
public Card(Rank rank, Suit suit){
this.rank = rank;
this.suit = suit;
// this.straightRank = straightRank;
}
public String printRank(){
return rank.getStringRank();
}
public String getSuit(){
return suit.getSuit();
}
public int getRank(){
return rank.getRank();
}
public String getStringRank(){
return rank.getStringRank();
}
public String toString(){
String str = "";
str += rank.getStringRank() + suit.getSuit();
return str;
}
}
如果我对您的理解正确,那么
Map所谓的 multimap 可以解决您的问题。其实这是一个可以将很多值\u200b\u200b绑定到一个key的东西。这种开箱即用的实现不在 Java 标准库中,但在 Guava 或 Apache 集合中早已存在。但是,如果您使用的是 Java 8,那么您也有出路,它看起来像这样:
此外,
computeIfAbsent文档中明确说明了用于创建多图的建议 - https://docs.oracle.com/javase/8/docs/api/java/util/Map.html#computeIfAbsent-K-java.util .function.Function -有条件的: