包含java-问题

use*_*318 0 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;
    }
Run Code Online (Sandbox Code Playgroud)

任何帮助?

谢谢

sho*_*639 5

因为您正在将String: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);
Run Code Online (Sandbox Code Playgroud)

您还需要将Card上的.equals方法覆盖为:

public boolean equals(Card other) {
    return other.getSuit().equals(this.getSuit()) && other.getNumber().equals(this.getNumber());
}
Run Code Online (Sandbox Code Playgroud)

  • 另请注意,允许`Card`从`equals`返回`true`作为`String`将严重违反`equals`的契约,因为它不会反身(`String`不会返回当给出相同的"卡片"时,"真实". (3认同)