当我试图调试一个非常奇怪的并发症时,当我试图从最后一轮失败者获得他的最高排名卡并将其交给我时。
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是平均等级,但是钻石?这是黑桃,但无论如何我做了另一次尝试,我甚至得到一个更开玩笑的句子。排名缺失!上面的代码甚至可以实现这一点吗?对不起,如果我遗失了什么。
注意:因为卡片是绘制的图像,如果它是带有文件名的东西我会注意到。刚刚做了检查,这很好
答案 0 :(得分:0)
我认为问题不仅仅是没有印刷的等级。您需要确保您的代码具有凝聚力并尽量减少耦合。看起来toString方法正在做很多它本来不应该做的工作,对象中的所有东西都应该只关注该对象实例中包含的信息,并且每个对象实例都是可能的。方法应该集中在做一件事。为什么不在卡中存储卡的名称和颜色,这只是一个例子
public String toString(){
return this.colour + " " + this.name;
}
而不是试图推断出你是哪个卡片实例。 你是卡。你应该能够收集自己的信息。底线是良好的编程实践是好的,因为它们可以帮助你做很多事情,它们可以帮助你进行调试,更多的方法=更多的堆栈跟踪,更窄的可能问题范围,以及它们有助于提高可读性。
对不起,这可能不是你想听到的,但你可能需要做一些重大的重构才能解决什么错误。