2013-05-29 60 views
1

我正在做一个摆动卡片游戏(java)比较法违反其总合同。简单比较

用户必须等待轮到他,拿一张卡,然后按确认。当轮到他时,他不能拿任何卡。

它开始是这样的:

this.cardTaken = false; 
board.canTakeCards(!cardTaken); 

然后在板类谈到下一步的行动:

public void canTakeCards(boolean can) { 
     if (can) { 
      this.btnConfirm.setEnabled(false); 
      this.pnlCards.setCanTake(true); 

     } else { 
      this.btnConfirm.setEnabled(true); 
      this.pnlCards.setCanTake(false); 
     } 

(该else当用户需要一个卡发生)。

所以。我得到Comparison method violates its general contract在线board.canTakeCards(!cardTaken);

这只发生一次,我“测试”了我的游戏大约8次。我对此很困惑和害怕。

我的一个理论是,我称之为从代码的2个型动物部分此功能在同一执行时间,并在同一时间接收到truefalse。但我修改了我的代码,我认为这是不可能的。

有什么建议吗?谢谢

+0

我想你需要发布一些相关的代码,比如你在哪里叫'board.canTakeCards(!cardTaken);'。 – NINCOMPOOP

+0

您的代码不显示任何比较。你能给我们提供'canTakeCards'的内部细节吗?那里涉及哪些自定义对象? – Howard

+2

你“有”的消息?谁给了你? IDE?编译器?运行?它是一个例外吗? –

回答

3

此消息文本包含在从Java 7排序集合抛出的异常中,表明该对象具有不一致的compareTo实现,这基本上意味着它不会对对象强加全部排序。在Java 7之前,这被默默地忽略了。修改你的Comparable类。

+0

这些只是简单的布尔值。我不知道你想说什么。我在所有比赛中都没有任何可比的职业。对不起,我的新手知识。 – auron344

+0

仔细阅读你的问题后,我断定你在运行时出现这个错误,这意味着它是一个例外。然后,必须涉及引发异常的一些代码。只用你发布的代码是不可能的。 –

+0

是的,我在运行时遇到了这个错误。对不起,如果我没有提到。 (仍然noob)。关于张贴更多的代码...我有成千上万的行,我不能atm(我的函数和变量的名字是在加泰罗尼亚语,所以我必须翻译他们,让你更清楚)。无论如何,是否有可能发生我之前提到的? **我的理论之一是我在相同的执行时间从代码的2个不同部分调用此函数,并且它同时接收到true和false ** – auron344

相关问题