我有这个脚本,并且如果玩家可以协助特定卡的套装,则设为标识符。所以,如果他协助,显示消息,你协助,没问题,但如果他确实虚张声势,验证永远不会完成并显示其他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;
}
任何帮助?
感谢
答案 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()
返回永远不等于卡的字符串。