扑克牌比大小
要求:用户选择比较方式(分为一张牌比较和两张 牌比较两种方式),用户输入底牌的数量(一张牌比较模式底牌 最少2张最多54张;两张牌比较模式底牌最少4张最多54张 ),即从5 4张牌中随机抽出足够数量的底牌。用户A和用户B 分别从底牌中抽取牌进行比较,然后判断谁赢谁输,最后让用户 选择是否在玩一次。一张牌大小比较规则:大王〉小王〉A〉K 〉Q〉J〉10〉9……〉2,相同点数按照花色黑 红〉梅〉方进行比较。两张牌大小比较规则:对子大于非对子, 均为单张即按照一张牌比较规则比较最大那张,均为对子按一张 牌点数比较规则,双方对子点数一样,比较花色,即拥有黑桃的赢。
求思路😭😭
Java扑克牌比大小
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
关注- 你可以看下这个问题的回答https://ask.csdn.net/questions/7697011
- 除此之外, 这篇博客: Java里重载、重写、多态之间的联系和区别中的 方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载;重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的参数列表,有兼容的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常(里氏代换原则)。重载对返回类型没有特殊的要求,不能根据返回类型进行区分。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
- 以下回答由chatgpt基于相关博客总结生成:
针对问题"请问您需要帮助实现Java扑克牌的比大小吗?",以下是一个可能的实现方案:
- 首先定义一个扑克牌的数据结构,可以使用一个类来表示一张牌,包括花色和点数两个属性
public class Card { private int suit; // 花色,0-3分别表示黑桃、红桃、梅花、方块 private int face; // 点数,1-13分别表示A、2-10、J、Q、K // 构造函数,需要传入花色和点数 public Card(int suit, int face) { this.suit = suit; this.face = face; } // 定义equals方法,用于比较两张牌是否相等 @Override public boolean equals(Object obj) { if (obj instanceof Card) { Card other = (Card) obj; return this.suit == other.suit && this.face == other.face; } return false; } // 定义toString方法,用于打印牌的内容 @Override public String toString() { String[] suits = {"黑桃", "红桃", "梅花", "方块"}; String[] faces = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"}; return suits[suit] + faces[face-1]; } }- 定义一个比较大小的规则,这里使用常规的扑克牌大小比较规则(即先比较点数,点数相同时再比较花色)
public class CardComparator implements Comparator<Card> { @Override public int compare(Card c1, Card c2) { if (c1.face != c2.face) { return c1.face - c2.face; } else { return c1.suit - c2.suit; } } }- 对于一副完整的扑克牌,可以使用一个List来表示,每次发牌或者出牌都需要从这个List中删除对应的牌
public class Deck { private List<Card> cards = new ArrayList<>(); public Deck() { for (int suit = 0; suit < 4; suit++) { for (int face = 1; face <= 13; face++) { cards.add(new Card(suit, face)); } } } // 洗牌 public void shuffle() { Collections.shuffle(cards); } // 发一张牌 public Card dealOneCard() { if (cards.isEmpty()) { return null; } return cards.remove(0); } }- 比较两副牌的大小时,可以按以下步骤进行:
- 将两副牌分别按照点数从小到大排序
- 对每组对应的牌进行比较,如果有一组中的牌更大,则可以直接判断该副牌更大;如果每组对应的牌大小相同,则比较下一组牌,直至两副牌中有一副大小更大
public class PokerComparator { private CardComparator cardComparator = new CardComparator(); // 比较两副扑克牌的大小,返回1表示p1比p2大,返回-1表示p2比p1大,返回0表示相等 public int compare(List<Card> p1, List<Card> p2) { List<Card> copy1 = new ArrayList<>(p1); List<Card> copy2 = new ArrayList<>(p2); copy1.sort(cardComparator); copy2.sort(cardComparator); for (int i = copy1.size()-1; i >= 0; i--) { int cmp = cardComparator.compare(copy1.get(i), copy2.get(i)); if (cmp > 0) { return 1; } else if (cmp < 0) { return -1; } } return 0; } }- 最后,可以通过一个简单的测试程序来检验上述代码是否能够正常工作,例如:
public class Test { public static void main(String[] args) { Deck deck = new Deck(); deck.shuffle(); List<Card> p1 = new ArrayList<>(); List<Card> p2 = new ArrayList<>(); for (int i = 0; i < 5; i++) { p1.add(deck.dealOneCard()); p2.add(deck.dealOneCard()); } System.out.println("玩家1的牌:" + p1); System.out.println("玩家2的牌:" + p2); PokerComparator comparator = new PokerComparator(); int cmp = comparator.compare(p1, p2); if (cmp > 0) { System.out.println("玩家1赢了!"); } else if (cmp < 0) { System.out.println("玩家2赢了!"); } else { System.out.println("两副牌大小相同!"); } } }以上程序是一个简单的实现方案,可能还有一些细节需要完善或者优化,例如可以对扑克牌的大小比较规则进行调整,或者添加一些异常处理等等。希望能够对你有所帮助!
本回答被题主选为最佳回答 , 对您是否有帮助呢?评论 打赏 举报解决 1无用