2017-02-24 23 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

我正在提供一般解决方案。如果他想做类型检查等,他可以。无需投票。我明确表示这不是一个完整的例子。 –