从卡的toString()获取错误的字符串

时间:2018-02-26 08:14:49

标签: java string tostring

当我试图调试一个非常奇怪的并发症时,当我试图从最后一轮失败者获得他的最高排名卡并将其交给我时。

public Card highestRankingCard()
{
    Collections.sort(getHand());

    Card temp = hand.get(hand.size() - 1);

    return temp;
}

当我打印到JOptionPane时,我正在拿回一件完全不相关的西装。

JOptionPane.showMessageDialog(null, "You was the first place in last round and " + game.scores().lastRoundLoser().getName() + " was the last.\n Choose a card of rank 3 - 10 to swap with his highest ranking card.\n" + game.scores().lastRoundLoser().getName() + " has given you " + game.scores().lastRoundLoser().highestRankingCard().toString(), "Swap cards", JOptionPane.INFORMATION_MESSAGE);

长码只是获得失败者玩家的参考,并从他那里调出最高的筹码()。 基本上我所做的就是调用卡片的toString

public String toString()
{
    if(rank == 16)
        return "Black Joker";
    else if(rank == 17)
        return "Red Joker";
    else
    {
        String s = "";

        if(rank == 15)
        {
            s = s + "2";

            if(suit.equals("h"))
                s = s + " of hearts";
            else if(suit.equals("d"))
                s = s + " of diamonds";
            else if(suit.equals("c"))
                s = s + " of clubs";
            else if(suit.equals("s"))
                s = s + " of spades";

            return s;
        }
        else if(rank == 14)
        {
            s = s + "Ace";

            if(suit.equals("h"))
                s = s + " of hearts";
            else if(suit.equals("d"))
                s = s + " of diamonds";
            else if(suit.equals("c"))
                s = s + " of clubs";
            else if(suit.equals("s"))
                s = s + " of spades";

            return s;
        }

        if(suit.equals("h"))
            s = s + " of hearts";
        else if(suit.equals("d"))
            s = s + " of diamonds";
        else if(suit.equals("c"))
            s = s + " of clubs";
        else if(suit.equals("s"))
            s = s + " of spades";

        return s;
    }
}

最后添加的是我从用户那里获得的卡片: 15是平均等级,但是钻石?这是黑桃,但无论如何我做了另一次尝试,我甚至得到一个更开玩笑的句子。排名缺失!上面的代码甚至可以实现这一点吗?对不起,如果我遗失了什么。

注意:因为卡片是绘制的图像,如果它是带有文件名的东西我会注意到。刚刚做了检查,这很好

1 个答案:

答案 0 :(得分:0)

我认为问题不仅仅是没有印刷的等级。您需要确保您的代码具有凝聚力并尽量减少耦合。看起来toString方法正在做很多它本来不应该做的工作,对象中的所有东西都应该只关注该对象实例中包含的信息,并且每个对象实例都是可能的。方法应该集中在做一件事。为什么不在卡中存储卡的名称和颜色,这只是一个例子

public String toString(){
    return this.colour + " " + this.name;
} 

而不是试图推断出你是哪个卡片实例。 你是卡。你应该能够收集自己的信息。底线是良好的编程实践是好的,因为它们可以帮助你做很多事情,它们可以帮助你进行调试,更多的方法=更多的堆栈跟踪,更窄的可能问题范围,以及它们有助于提高可读性。

对不起,这可能不是你想听到的,但你可能需要做一些重大的重构才能解决什么错误。