2013-01-22 11 views
0

나는이 코드를 지금 작성하려고 노력해 왔으며 중첩 된 for 루프에 무엇이 잘못된 것인지 알 수 없습니다. 내 if 문과 관련된 문제 일 수 있다고 생각하지만 확실하지 않습니다. 코드는 임의의 중복 카드를 찾기 위해 10 개의 랜덤 카드를 검색합니다. 코드의 나머지 부분은 작동하지만이 부분에서 내가 잘못한 부분을 파악할 수는 없습니다. 누구라도 도와 주면 정말 감사 할 것입니다. (자바) 당신이 적절하게 무시 .equals() 방법이없는 (Card)를 사용하는, 그래서는 Object 기본 사용중첩 된 for 루프를 사용하여 중복 찾기

/* 
* Return true if there is a duplicate card in the pack 
*/ 
public boolean hasDuplicate() { 
    for (int i = 0; i < pack.size(); i++){ 
     for (int j = i; j < pack.size(); j++) { 
      if (i != j && pack.get(i).equals(pack.get(j))){ 
       pos = i; 
       return true; 
      } 
     } 
    } 
    return false; 
} 
+1

나에게 좋아 보인다. 얼마나 정확하게 작동하지 않습니까? '팩'이란 무엇입니까? –

+0

그리고'pos' 란 무엇입니까? – Srinivas

+1

리스트에 무엇이든지'.equals()'를 오버라이드 했습니까? – Kevin

답변

1

클래스 - 항등 연산자 (==를) - 두 개체가 동일한 지 여부를 확인합니다. 배열의 각 항목에 대해 new 개체로 배열을 채우므로 어떤 것도 ==과 같지 않으므로 .equals()이 아닙니다. 카드가 의미 상 동일한 지 (즉, 동일한 순위와 슈트) 반환하려면 해당 .equals() 메소드를 재정의해야합니다. 일반적인 계약을 유지하려면 hashCode을 다시 지정해야합니다 (x.equals(y)의 경우 x.hashCode() == y.hashCode).

+1

마지막 행을 다음과 같이 변경하십시오.''equals'와'hashCode' 사이의 계약을 유지하려면''hashCode 메소드도 대체해야합니다 ''. –

+0

알겠습니다. 고마워요. 나는 그것을 시도 할 것이고 그것이 그 때 일하기를 바랄 것이다. – user2001375

관련 문제