gpt4 book ai didi

java - 如何保留其他属性的 'tally'作为自己的类属性

转载 作者:行者123 更新时间:2023-12-02 10:19:30 27 4
gpt4 key购买 nike

我正在为纸牌游戏编写一个 Hand 类,并且我希望能够跟踪 Suit 中有多少张牌 。我将 Card 类型的 ArrayList 存储在 Hand 中,它充当我的 Hand。这就是我目前跟踪Hand 中每套Suit 数量的方式:

public class Hand {
private ArrayList<Card> hand;
private int clubs, diamonds, hearts, spades;

public Hand() {
hand = new ArrayList<Card>();
clubs = 0;
diamonds = 0;
hearts = 0;
spades = 0;
}

public Hand(Hand otherHand) {
this.hand.addAll(otherHand.hand);
CountSuits(otherHand.hand);
}

public Hand(ArrayList<Card> hand) {
clubs = 0;
diamonds = 0;
hearts = 0;
spades = 0;
this.hand = hand;
CountSuits(hand);
}

public void CountSuits(ArrayList<Card> cards) {
clubs += Collections.frequency(cards, Card.suit.CLUBS);
diamonds += Collections.frequency(cards, Card.suit.DIAMONDS);
hearts += Collections.frequency(cards, Card.suit.HEARTS);
spades += Collections.frequency(cards, Card.suit.SPADES);
}
}

这是一种困惑/不正确的做法吗?它在测试时给出奇怪的输出,这让我认为它不是无懈可击的,并且可能有更好的方法。这是我的 Card 类:

public class Card {
public enum rank {ACE, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING};
private rank Rank;
public enum suit {CLUBS, DIAMONDS, HEARTS, SPADES};
private suit Suit;

public Card() {
Rank = null;
Suit = null;
}

public Card(rank Rank, suit Suit) {
this.Rank = Rank;
this.Suit = Suit;
}
}

最佳答案

1) 我会使用 HashMap<Card.suit, ArrayList<Card>> hand;并按花色组织卡片,而不是使用整个包围阵列。这将涉及在构造函数中迭代整个 Hand 并将每张牌放入其正确的 ArrayList 中。

获取西装的尺寸将如下实现:

diamonds = hand.get(Card.suit.DIAMONS).size()
hearts = hand.get(Card.suit.HEARTS).size()
spades = hand.get(Card.suit.SPADES).size()
clubs = hand.get(Card.suit.CLUBS).size()

2)我还没有测试过这个,但我不认为 Collections.frequency()将在这里工作。它将比较所提供集合中的每个条目(Card 类型的对象)与类型 card.suit。您本质上是在比较不同类型的对象。频率中使用的 equals() 的结果将是 false对全部。

3)另外,对上述代码的一些注释:

  • 方法往往以小写字母开头(例如 CountSuits)
  • 创建您不想公开的方法 private 。 (例如 CountSuits)
  • 让构造函数使用 super() 互相调用是一种很好的 OOP 实践。

关于java - 如何保留其他属性的 'tally'作为自己的类属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54445730/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com