我在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)
答案 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()方法比较所有成员变量,所以这里也是频率。这是你想要的吗?
如果只有当卡和符号变量相同时,卡等于另一张卡,则必须覆盖默认的等于方法。