我不确定为什么这段代码不起作用:
所以我们有一个卡阵列:
Card[] hand = new Card[2];
其中包含两张卡片:
hand[0]=new Card("King","Hearts");
hand[1]=new Card("Ace","Hearts");
然而,当我尝试:
ArrayList<Card> deck = new ArrayList<Card>();
//这里的其他方法用52张牌填充牌组
然后:
deck.remove(hand[0]);
deck.remove(hand[1]);
然后手不被移除
答案 0 :(得分:2)
您只需要覆盖Object.equals
方法,即确定两张卡是否相同。如果您使用的是HashSet
或HashMap
类,则还需要覆盖hashCode()
方法。
答案 1 :(得分:1)
通过将两个所需的Object.equals
(rank和suit)指定为相等标准,您似乎没有覆盖Card
类中的String
方法,这反过来意味着{ {1}}方法将返回remove
并且不会删除false
。
我还建议覆盖Card
,尽管在这种情况下没有必要。
大多数IDE(例如Eclipse)具有根据您所需的相等标准生成这些方法的功能。
Here关于Java中equals / hashCode合约的一个着名的(但值得商榷的)SO问题。
答案 2 :(得分:1)
ArrayList.remove在内部使用equals来确定要删除的对象,因此需要实现equals。