2017-02-24 76 views
-1

我正在寫一個簡短的程序,我有一個問題。JAVA ArrayList不能通過indexOf找到元素()

State before fail

有更多的細節問題。

我有功能

public CardStck from(Card card) 
int pos = this.cardList.indexOf(card); 

卡在這個例子是卡(價值= 5,顏色=「d」) - 爲u調試屏幕 上看到,即使有該卡IM搜索5( D)(鑽石5卡)in this.cardList pos的值爲-1(未找到)

有誰能告訴我問題在哪裏?

+2

你是否實現了'equals()'? – shmosel

+0

您需要重寫您的hashCode和equals方法來檢查您的等式,以便indexof方法會相應地選擇 –

+0

您是否重寫了'Card'類中的equals/hasCode方法? – 2017-02-24 18:07:14

回答

0

在你的卡類中,實現「等於」方法,像這樣:

@Override 
public boolean equals(Object t){ 
    if(!(t instanceof Card)){ 
     return false; 
    } 
    Card c = (Card)t; 
    //Compare however you want, ie 
    return (c.getValue() == this.getValue()) & (c.getColor().equals(this.getColor()); 
} 

有可能是您要包括其他一些null檢查或安全的東西,例如確保顏色不爲空等,但這是一般的想法。

+0

它的作品,非常感謝你! – John

+0

當對象是另一種類型時,equals()不應該拋出異常。 – shmosel

+0

我正在提供一般解決方案。如果他想做類型檢查等,他可以。無需投票。我明確表示這不是一個完整的例子。 –