2013-05-29 88 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

相關問題