OK, вот моя проблема. У меня есть связанный список объектов карты.Удалить элемент из связанного списка JAVA
У меня есть следующий метод
public void removeCard(Card card){
cards.remove(card);
}
если я создаю карты с = новой карты (5, C); например
и карта с одинаковыми значениями 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;
}
}
не имеют равных() метод в классе карты ... Я подумал, что если у вас есть LinkedList карт, то если вы просто звоните theList.remove (theCard) это будет просто удалить объект карты в списке, равном картой в параметре – user69514
Это будет, но Java должен знать, что означает «равно» для вас. У вас есть isEqual, который предположительно должен быть переопределением равных. Обратите внимание, что вам действительно не нужно переопределять hashCode в этой ситуации, хотя вы можете. –
Вы должны сделать привычкой всегда переопределять равные и hashCode одновременно. В противном случае трудно найти ошибки с хэш-таблицами. – starblue