更新类中属性的值

时间:2016-10-05 14:47:16

标签: java class

我在Card.java类中有以下代码:

public class Card{
private String card,notation;
private int frequency,removed,dealt;

public Card(String notation,String card){
    this.notation = notation;
    this.card = card;
}

public String getCard(){
    return card;
}

public void setFrequency(int frequency){
    this.frequency = frequency;
}

public int getFrequency(){
    return frequency;
}

}

以及Cardstack.java中的以下代码:

public class Cardstack{

private static ArrayList<Card> cardstack = new ArrayList<>();

public boolean addToStack(Card card){
    for(Card c: cardstack){
        if(c.getCard().equals(card.getCard())){
            return false;
        }
    }
    return cardstack.add(card);
}

public void shuffleStack(){
    Collections.shuffle(cardstack);
}

public ArrayList<Card> getCards() {
    return cardstack;
}

}

现在,每当我必须从骰子符号添加卡片时,比如2d3,我会执行以下操作:

Cardstack stack = new Cardstack();
for(i=2;i<=6;i++){
    Card card = new Card("2d3",""+i);
    stack.add(card);
}

它工作正常,直到我必须更新卡的频率。假设,如果我现在必须更新卡的频率&#34; 3&#34;骰子&#34; 2d3&#34; (已经在堆栈中添加),我该怎么做? (请注意,卡片&#34; 3&#34;骰子&#34; 2d3&#34;卡片与卡片不同,#3; 3&#34;不同的骰子,比如&#34; 2d4& #34)

2 个答案:

答案 0 :(得分:0)

现在你必须通过整个ArrayList

for(Card c: cards){
...
}

使用Card中的equals方法找到匹配的卡(你必须覆盖它)。

更优雅的解决方案是使用HashMap(a,b),其中a = card.notation,然后您可以通过hashmap.get(卡表示法)查找卡片来更新频率。

然后您可以将密钥(卡表示法)保持为实际堆栈并将其洗牌: List keys = new ArrayList(map.keySet()); Collections.shuffle(键);

答案 1 :(得分:-1)

默认情况下,equals()方法比较所有成员变量,所以这里也是频率。这是你想要的吗?

如果只有当卡和符号变量相同时,卡等于另一张卡,则必须覆盖默认的等于方法。