2013-05-29 2 views
1

나는 스윙에서 카드 게임을하고있다. (자바)비교 방법은 일반 계약을 위반합니다. 간단한 비교

사용자는 자신의 차례를 기다린 후 카드를 받고 확인을 누른다. 자신의 차례가 아니라면 카드를 가져갈 수 없습니다.

이 이런 식으로 시작합니다

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 발생).

So. 나는 Comparison method violates its general contract의 라인을 가지고있다 board.canTakeCards(!cardTaken);

그것은 단지 한 번 일어 났고 약 8 시간 동안 나의 게임을 "테스트"했다. 나는 이것에 대해 정말로 혼란스럽고 두려워합니다.

내 이론 중 하나는 동일한 실행 시간에 코드의 2 개의 다른 부분에서이 함수를 호출하고 동시에 truefalse을 받는다는 것입니다. 하지만 내 코드를 개정하고 그것이 불가능하다고 생각합니다.

어떤 조언이 필요합니까? 감사합니다

+0

'board.canTakeCards (! cardTaken);'와 같이 관련 코드를 게시해야한다고 생각합니다. – NINCOMPOOP

+0

코드에 비교가 표시되지 않습니다. 'canTakeCards'의 내부 세부 사항을 알려주시겠습니까? 거기에 어떤 사용자 지정 개체가 관련되어 있습니까? – Howard

+2

메시지를 받았습니까? 누가 너에게 줬어? IDE? 컴파일러? 실행 시간? 예외입니까? –

답변

3

이 메시지 텍스트는 문제의 객체가 일치하지 않는 compareTo 구현을 가지고 있음을 나타내는 Java 7 정렬 된 컬렉션에서 예외 처리되는 항목에 포함되어 있습니다. 이는 기본적으로 객체에 총 주문을 부과하지 않음을 의미합니다. Java 7 이전에는이 ​​사실이 무시되었습니다. Comparable 클래스를 수정하십시오.

+0

이들은 단순한 불리언입니다. 나는 네가 나에게 뭐라고 말하려고하는지 알지 못한다. 내 모든 게임에서 필적 할만한 클래스가 없다. 나의 초보자 지식에 대해 유감스럽게 생각합니다. – auron344

+0

신중하게 질문을 읽은 후, 런타임에이 오류가 발생하는 것으로 결론을 내었습니다. 이는 예외라는 것을 의미합니다. 예외를 throw하는 코드가 있어야합니다. 게시 한 코드만으로는 얻을 수 없습니다. –

+0

예, 런타임에이 오류가 발생했습니다. 미안하지만 내가 언급하지 않았다. (여전히 멍청한 놈). 더 많은 코드를 게시하는 것에 대해 ... 저는 수천 줄의 선이 있습니다. ATT는 없습니다. (함수와 변수의 이름은 카탈로니아 어로되어 있기 때문에 번역하여 번역해야합니다.) 어쨌든, 내가 전에 언급 한 것이 일어날 수 있습니까? ** 내 이론 중 하나는 동일한 실행 시간에 코드의 두 부분에서이 함수를 호출하고 동시에 true와 false를 수신한다는 것입니다 ** – auron344

관련 문제