Closed. This question needs debugging details。它当前不接受答案。
                        
                    
                
            
        
            
        
                
                    
                
            
                
                    想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
                
                    2年前关闭。
            
        

    

当我尝试调试一个非常奇怪的并发症时,当我尝试从上一轮失败者那里获得他最高等级的卡并将其拿到手时会发生。

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);


长代码只是获得失败者玩家的参考,并从他那里调用最高的RankingCard()。
基本上我要做的就是调用卡的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;
    }
}


最后添加的一张是我从用户那里得到的卡片:java - 从卡的toString()获取错误的字符串-LMLPHP 15的平局等级还可以,但是是钻石?那是黑桃,但是无论如何,我又做了一次尝试,甚至得到了更多的笑话。排名不见了!上面的代码甚至可能吗?抱歉,如果我缺少什么。 java - 从卡的toString()获取错误的字符串-LMLPHP

注意:由于Cards是绘制的图像,如果它的文件名是我注意到的。只是做了检查而已

最佳答案

我认为问题不仅仅在于没有打印出来的等级。您需要确保您的代码具有凝聚力,并最大程度地减少耦合。看起来toString方法正在做很多它本不应该做的工作,对象中的所有内容都应仅在可能的范围内仅关注该对象实例中包含的信息,并且每个方法都应专注于执行一样东西。为什么不将卡的名称和颜色存储在卡中,这只是一个简单的案例

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


而不是尝试推断您是哪个卡实例。你是卡。您应该能够从自己那里收集这些信息。最重要的是,良好的编程习惯是好的,原因是它们可以帮助很多事情,可以帮助您调试,更多的方法=可以跟踪更多的堆栈跟踪,范围更窄的可能问题,并且可以提高可读性。

抱歉,这可能不是您想听到的,但是您可能需要做一些重要的重构,才能解决问题所在。

10-07 16:27