【发布时间】:2016-01-16 15:52:34
【问题描述】:
所以我尝试使用 containsAll 内置列表方法来比较两个数组
我对单个值使用了 contains 方法,它工作得很好,但是 contains all 却不行。
我正在做一个纸牌游戏,所以我正在检查一组卡片是否也在另一组卡片中
所以:
if(this.hand.containsAll(hand.getCards())){
但是这个语句一直返回 false..
这是构造函数
private ArrayList<Card> hand;
public Hand(ArrayList<Card> hand) {
this();
this.hand.addAll(hand);
}
这是获取卡片的方法
public ArrayList<Card> getCards() {
return this.hand;
}
不确定为什么这段代码没有为 containsAll 返回 true,但单独完成时很好,是否有一些我没有考虑过的常见概念?
任何指针都会是一个奖励
谢谢
编辑:
使用时返回 true :
作品
public boolean hasCard(Card card){
if (this.hand.contains(card)){
return true;
}
}
没有
public boolean hasCards(Hand hand){
if(this.hand.containsAll(hand.getCards()){
return true
}
}
主要..
Card one = new Card(Card.Rank.ACE, Card.Suit.CLUBS);
Card two = new Card(Card.Rank.ACE, Card.Suit.DIAMONDS);
Card three = new Card(Card.Rank.TWO, Card.Suit.SPADES);
Card four = new Card(Card.Rank.SIX, Card.Suit.randSuit());
Card five = new Card(Card.Rank.SEVEN, Card.Suit.randSuit());
ArrayList<Card> cards = new ArrayList<>();
cards.add(one);
cards.add(two);
cards.add(three);
cards.add(four);
cards.add(five);
Hand h = new Hand(cards);
Card ones = new Card(Card.Rank.ACE, Card.Suit.CLUBS);
Card twos = new Card(Card.Rank.ACE, Card.Suit.DIAMONDS);
Card threes = new Card(Card.Rank.TWO, Card.Suit.SPADES);
ArrayList<Card> cards2 = new ArrayList<>();
// works
h.hasCard(five);
// doesn't
h.hasCards(h2);
cards2.add(ones);
cards2.add(twos);
cards2.add(threes);
Hand h2 = new Hand(cards2);
【问题讨论】:
-
this.hand是Hand还是List<Card>实例? -
List
实例@Tunaki -
你在
Card类中实现了equals方法吗? -
不,@yole 先生,这是我应该避免或做的事情吗?
-
不是一回事,所以我用这个。 @Dima,这个。指的是对象值,而 hand.getCards() 指的是参数中传递的手值.. 这只是基本的 java