包含java-问题

时间:2011-02-08 15:29:47

标签: java

我有这个脚本,并且如果玩家可以协助特定卡的套装,则设为标识符。所以,如果他协助,显示消息,你协助,没问题,但如果他确实虚张声势,验证永远不会完成并显示其他System.out.println(手);

其他的结果是[七个钻石,四个SPADES,七个SPADES,钻石之王,更多卡片]

pn50.getText()(例如,结果是CLUBS)

我怀疑是什么原因,行hand.subList(0,10).contains(pn50.getText())从未在列表中找到任何内容(即播放器的手)

例如,如果玩家扮演心灵之王,并且玩家2扮演七个俱乐部并拥有三个心脏,则假设显示消息“玩另一个”

@Override
    public boolean validCard(List<Card> hand, JTextField pn70, JTextField pn50, int i) {
        if(pn70.getText().equals (pn50.getText())) {
            System.out.println("you assist");
            return true;
        } else {
            if (hand.subList(0, 10).contains(pn50.getText())) {
                System.out.println("play another");
                }
            else 
                System.out.println(hand);
        }
        return false;
    }

任何帮助?

感谢

4 个答案:

答案 0 :(得分:5)

因为您要将字符串:pn50.getText()Card对象进行比较。 Contains使用.equals方法来测试相等性,除非你在Card上设置.equals方法与另一个String进行比较,包含的方法永远不会返回任何内容。

这是一个解决方案。我假设您可以从字符串中创建Card对象,因此只需将该字符串包装到Card对象中并进行比较即可。

Card c = new Card(pn50.getText());
if (hand.subList(0, 10).contains(c)) {
    System.out.println("play another");
}
else 
    System.out.println(hand);

此外,您需要将Card上的.equals方法覆盖为:

public boolean equals(Card other) {
    return other.getSuit().equals(this.getSuit()) && other.getNumber().equals(this.getNumber());
}

答案 1 :(得分:1)

这里最简单的解决方案是用循环替换对contains的调用:

boolean contained = false;
for (Card card : hand.subList(0, 10)) {
  if (card.suit().equals(pn50.getText()) {
    contained = true;
    break;
  }
}

if (contained) {
  // ...
} else {
  // ...
}

答案 2 :(得分:0)

问题可能是您将 Card 类型的对象(您的List属于此类型)与 String JTextField.getText()返回String)? :)

包含。您可能希望覆盖 Card 对象的 hashCode() equals()方法。

答案 3 :(得分:0)

这是因为您的源列表包含卡片,因此您的子列表也包含卡片。 pn50.getText()返回永远不等于卡的字符串。