2014-12-21 151 views
-2

我不知道爲什麼這個代碼不工作:ArrayList中刪除對象

,所以我們有一個卡陣列:

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

你有兩個不同的'ArrayList's。你從第一個移除,但期望它從第二個移除? – Maroun

+1

你的意思是「手沒有被刪除」?你的代碼只會從甲板ArrayList中刪除**一張**卡。你還應該考慮爲你的問題的骨頭提供更多的肉,以便我們能夠回答它。 –

+4

你是否重寫'Card'類中的'equals'方法?發佈簡短的例子,它會讓我們重現您的問題。 – Pshemo

回答

1

看樣子你是不是通過指定重寫Object.equals方法在Card類作爲平等標準的兩個期望String s(等級和花色),這又意味着remove方法將返回false,並且不會刪除Card

我也建議覆蓋hashCode,雖然在這方面沒有必要。

大多數IDE(例如Eclipse)都具有根據您所需的相等性標準生成這些方法的功能。

Here對於Java中的equals/hashCode合同而言,這是一個着名的(尚未爭論的)SO問題。

+0

我剛剛通過創建兩張卡片並使用.equals檢查它們是否相等來運行簡單測試,並且它工作正常。還有什麼可能是錯的? – John

+1

@John這是一個簡短的測試:D – Mena

+0

謝謝,我在Card中的.equals類將它與一張卡片比較,而不是一個對象,因此它不是重寫。 – John

1

ArrayList.remove內部使用equals來確定要刪除哪個對象,因此您需要實現equals。

2

您只需要覆蓋Object.equals方法,即確定兩張卡片是否相同。如果您正在使用HashSetHashMap類,那麼您還需要覆蓋hashCode()方法。