나는 '저자'클래스 (현재는 이름 만 있음)와 해당 저자가 공통으로 갖고있는 기사의 수를 2 개 보유 할 수있는 'CoAutoria'클래스를 보유하고 있습니다.
공동 저자의 상위 10 명 (기사 수와 관련하여)을 알아 내기 위해 각 쌍마다 기사 합계를 보관하는 'CoAutoria'의 TreeSet을 만들었습니다. 나는 여러 해의지도를 돌아보고, 다른 저자와 그들의 공동 저자 세트를 모아야한다. 그런 다음 각 쌍에 대해 'CoAutoria'인스턴스를 만들고이를 트리 집합에 추가합니다 (아직 존재하지 않는 경우). 또는 기사의 수를 단순히 집합에있는 기사 수로 합합니다.에는 잘못된 결과가 포함되어 있습니다.
이미 compareTo 메서드를 만들어서 트리 집합에 삽입하고 작성자 순서가 중요하지 않도록 equals 메서드를 만들었습니다. `
public class CoAutoria implements Comparable<CoAutoria>
{
private Autor autor1;
private Autor autor2;
private int artigosComum;
(...)
}
@Override
public int compareTo(CoAutoria a2)
{
String thisAutor1 = autor1.getNome();
String thisAutor2 = autor2.getNome();
String caAutor1 = a2.getAutor1().getNome();
String caAutor2 = a2.getAutor2().getNome();
if((autor1.equals(a2.getAutor1()) && autor2.equals(a2.getAutor2())) || (autor1.equals(a2.getAutor2()) && autor2.equals(a2.getAutor1())))
{
return 0;
}
else
{
return 1;
}
}
@Override
public boolean equals(Object o)
{
if(this == o)
{
return true;
}
if(o == null || o.getClass() != this.getClass())
return false;
CoAutoria ca = (CoAutoria) o;
String thisAutor1 = autor1.getNome();
String thisAutor2 = autor2.getNome();
String caAutor1 = ca.getAutor1().getNome();
String caAutor2 = ca.getAutor2().getNome();
if((thisAutor1.equals(caAutor1) && thisAutor2.equals(caAutor2)) || (thisAutor1.equals(caAutor2) && thisAutor2.equals(caAutor1)))
{
return true;
}
else
{
return false;
}
}
주요 문제는 다음과 같습니다 : 나는 세트가 이미 'CoAutoria'의 특정 인스턴스가 있는지 확인하면, (나는 TreeSet에의 포함() 메소드를 사용하고
여기에 주요 코드는), 그것은 나에게 잘못된 결과를 준다 ... 때로는 페어 AB가 (BA의 형태로) 그 세트에 이미 존재한다는 것을 정확하게 검사하지만 때로는 그렇지 않다. ... 내가 읽은 것에 대해, equals 메서드는 그렇게할만한 것이 아닙니다. 맞습니까?
[편집 :] 는 첫 번째 게시물 이후로 나는 어쩌면 문제는 내가
public int compareTo(CoAutoria a2)
{
String thisAutor1 = autor1.getNome();
String thisAutor2 = autor2.getNome();
String caAutor1 = a2.getAutor1().getNome();
String caAutor2 = a2.getAutor2().getNome();
if(this.equals(a2))
{
System.out.println("return 0");
return 0;
}
else
{
int aux = thisAutor1.compareTo(caAutor1);
if(aux != 0)
{
return aux;
}
else
{
return thisAutor2.compareTo(caAutor2);
}
}
}
로 변경하지만 여전히 내 나쁜주는 compareTo..So에 거주 있다고 생각하기 시작 결과 ... 나는 지금 생각했다. 만약 그것이 같은 'CoAutoria'라면, 나는 0을 반환하고, 그렇지 않다면 나는 compareTo 값으로 주문한다. 그러나 뭔가가 빠져있다.
예를 들어 설명 할만큼 충분하지는 않지만 ... contains를 사용하는 대신 loop through를 사용하면 equals()를 사용한 테스트가 작동하지 않을 수도 있습니다. –
@DariusX. 문제는 그의 equals와는 다르다. compareTo 함수를 사용하고있다. compareTo 함수가 제대로 작동하지 않으면 정렬 된 컬렉션에 대해'contains' 메서드도 작동하지 않습니다. – greedybuddha