OKこれは私の問題です。私はカードオブジェクトのリンクされたリストを持っています。リンクリストから要素を削除するJAVA
私はカードC =新しいカード(5、C)を作成する場合、私は次のような方法
public void removeCard(Card card){
cards.remove(card);
}
を持っています。例えば
となり、リンクリスト(カード)には全く同じ値2とCのカードがあります。
私がメソッドCardPile.remove(card)を呼び出した場合
エラーは表示されませんが、パラメータカードと等しい要素は削除されません。 これはなぜ起こっていないのでしょうか?
import java.util.LinkedList;
public class CardPile {
final char [] suit = {'C','D','H','S'};
final char [] rank = {'A','2','3','4','5','6','7','8','9','T','J','Q','K'};
LinkedList<Card> cards;
public CardPile(){
cards = new LinkedList<Card>();
}
public void addCard(Card card){
cards.addLast(card);
}
public void removeCard(Card card){
cards.remove(card);
}
public void removeSpecial(Card card){
LinkedList<Card> temp = new LinkedList<Card>();
for(int i=0; i<cards.size(); i++){
if(cards.get(i).equals(card)){
temp.add(cards.get(i));
}
}
cards = temp;
}
public void listCards(){
for(int i=0; i<cards.size(); i++){
System.out.print(cards.get(i).toString()+" ");
}
System.out.println();
}
public boolean isEmpty(){
if(cards.size()==0)
return true;
else
return false;
}
public Card drawCard(){
return cards.removeLast();
}
public boolean hasCard(Card card){
int index = 0;
boolean contained = false;
if(cards.size()==0){
System.out.println("error, cards size is 0");
return false;
}
else{
while(index<cards.size() && !contained){
if(cards.get(index).isEqual(card)){
System.out.println("Card found");
contained=true;
}
index++;
}
}
return contained;
}
}
私はカードクラスのequals()メソッドを持っていない...私はあなたがカードのLinkedListのを持っている場合は、単に theList.remove(theCard) を呼び出す場合、それは単にオブジェクトカードを取り外しますと思いましたリストの中では、パラメータ – user69514
のtheCardと同じですが、Javaは "equals"が何を意味するのかを知る必要があります。あなたはisEqualを持っています。これは、おそらくequalsのオーバーライドでなければなりません。このような状況では、実際にはhashCodeをオーバーライドする必要はありませんが、できることに注意してください。 –
equalsとhashCodeを同時にオーバーライドするのは習慣にしてください。それ以外の場合、ハッシュテーブルでエラーを見つけるのは難しいでしょう。 – starblue