这可能是非常基本的,我有一个“卡”列表,其中“卡”对象只有一个“数字”字段(int)。另一个列表“ listB”包含该列表的子集。
当我遍历第一个列表时,检查每个元素是否:
listB.contains(card);
我得到误报。一些具有相同编号但不属于listB的卡返回“ true”。原因必须是它们具有相同的哈希码。
如何在不丑化简单的“ Card”类的情况下避免这种冲突?我只希望每个Card实例都是唯一的,而不管它的“数字”值如何]
public interface Card { } public class NumberCard implements Card { private int number; public NumberCard(int number) { this.number = number; } public int getNumber() { return number; } @Override public String toString() { return Integer.toString(number); } } public class Setup { public static List<Card> getCards(){ List<Card> cards = new ArrayList<>(); int amount = 4; add(cards, 4, new NumberCard(0)); add(cards, 4, new NumberCard(1)); add(cards, 4, new NumberCard(2)); add(cards, 4, new NumberCard(3)); add(cards, 4, new NumberCard(4)); return cards; } private static void add(List<Card> cards, int amount, Card card) { for (int i = 0; i < amount; i++) { cards.add(card); } } } public DeckOfCards() { cards = Setup.getCards(); Collections.shuffle(cards); } public class Player { private List<Card> cards; private List<Card> hidden;
}
如果我在“玩家”“卡”字段中随机存储4张卡然后从4中选择2作为“隐藏”如果相同的卡号同时出现在两个“隐藏”和“非隐藏”中,则
for(Card card:cards){if(hidden.contains(card){
对于两个隐藏的”和“非隐藏的”都将返回true。
这可能非常基础,我有一个“卡”列表,其中“卡”对象只有一个“数字”字段(int)。另一个列表“ listB”包含该列表的子集。当我循环浏览第一个列表时,...
您需要做两件事来处理这种情况:
private String id
中说NumberCard
,并确保该字段的值对于每张卡都是唯一的。换句话说,此字段应作为每张卡的唯一标识符。